2016-12-10 21 views
0

我有一個用戶的初始節點,可以擁有多個項目,並且這些項目也可以組織成組(每個組成多個組)。因此,用戶可以擁有兩個相應的關係 - 擁有該組和擁有該項目。這些項目與組有額外的關係。我想找到用戶擁有的項目,但不是任何組。如何搜索Neo4J中處於一種關係但不是另一種關係的endNodes Java

有沒有辦法如何在一個遍歷方法中選擇這些項目,還是應該獲取用戶擁有的所有項目,然後遍歷它們以找出這些與組之間的關係?

編輯:對不起,我的問題還不夠清楚。通過遍歷方法我的意思是在Java中使用Neo4j遍歷框架。例如:

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的所有關係迭代的地方。

回答

1

在暗號:

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());