跟着官网代码学习.jpg–jdk 1.8.0 & neo4j 3.5
https://neo4j.com/docs/java-reference/current/java-embedded/
目标:返回属于“Principal1拥有的pet0的孩子”
1. 创建一个图数据库:
- 目标图:
为了返回 Pet0 的所有后代,要求与 Pet0 必须有 owns 和 Principal1 关系(实际上只有 Pet1 和 Pet3 ),
2. 代码实现:
- 不知道为啥,只要不传入Node,我的Traverser方法的返回值就没有内容,请问 各位 大佬这是什么诡异的问题。该代码还存在一定问题,但能了解
Uniqueness
的用法了。 - 遍历查询的 Uniqueness 应该设置成
NODE_PATH
来代替默认的NODE_GLOBAL
,这样节点可以被遍历不止一次,那些有不同节点但也有一些相同节点的路径(比如开始节点和结束节点)也能被返回。
private Traverser getPets(final Node startNode) {
Node endNode = graphDb.getNodeById(P1NodeId);
TraversalDescription td = graphDb.traversalDescription()
.breadthFirst()
.relationships(RelTypes.DESCENDENT,Direction.OUTGOING)
.relationships(RelTypes.OWNS,Direction.INCOMING)
.uniqueness( Uniqueness.NODE_PATH )
.evaluator(Evaluators.includeWhereEndNodeIs(endNode));
return td.traverse(startNode);
}
private String printNode() {
try (Transaction tx1 = graphDb.beginTx()) {
int count = 0;
Node startNode = graphDb.getNodeById(pet0NodeId);
//String output = "Principal1 owns" + "\n";
String output = "";
Traverser ownerTraverser = getPets(startNode);
System.out.println(ownerTraverser);
for (Path petpath : ownerTraverser) {
output += petpath.toString() + "\n";
count++;
}
return output;
}
}
1) Node_PATH
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb31fb094b136798a916605eb78777e5.png)
2) Node_GLOBAL
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/38098c018cbf5f0a81111fbf42887672.png)
3. 具体代码见: https://github.com/Amy996bbq/Neo4j/blob/master/learn/Uniqueness_pet.java