我有一个用户的初始节点,可以拥有多个项目,并且这些项目也可以组织成组(每个组分为多个组)。因此,用户可以具有两个对应的关系 - 拥有该组并拥有该项。这些项目与群组有额外的关系。
我想找到用户拥有的项目,但不是任何组。
有没有办法如何在一个遍历方法中选择这些项目,或者我应该获取用户拥有的所有项目,然后迭代它们以找出这些项目而没有与组的关系? < / p>
修改:很抱歉,我的问题不够明确。通过遍历方法我的意思是在Java中使用Neo4j Traversal Framework。例如:
TraversalDescription td = db.traversalDescription()
.breadthFirst()
.relationships(OWNS, Direction.BOTH)
//IS THERE A WAY HOW TO SAY THE NEXT RELATIONSHIP (EDGE) DOES NOT EXIST?
.evaluator(Evaluators.excludeStartPosition())
.uniqueness(Uniqueness.NODE_GLOBAL);
Traverser t = td.traverse(userNode);
for (Path p : t) {
//OR: SHOULD I LOOP TROUGH ALL THE RELATIONSHIPS OF THE END NODE - ITEM
System.out.println(p.endNode().getProperty("name"));
}
代码中的两条注释是我期望traversalDescription
的方法或迭代endNodes
的所有关系的地方。
答案 0 :(得分:1)
在Cypher:
MATCH (me:Person{name:'me'})-[:OWNS]->(i:Item)
WHERE NOT (i)-[:PART_OF]->() // not part of a group
RETURN i
在Java API中:
Node me = graphDb.findNode(Label.label("Person"), "name", "me");
Iterable<Relationship> owns = me.getRelationships(RelationshipType.withName("OWNS"), Direction.OUTGOING);
Stream<Node> nodes= StreamSupport.stream(owns.spliterator, false)
.filter(r -> r.getEndNode().hasRelationship(RelationshipType.withName("PART_OF"),OUTGOING))
.map(r -> r.getEndNode());