2016-06-29 10 views
1

Ich versuche, eine Abfrage in Cypher zu schreiben, die in der Lage ist, einen einzelnen Knoten mit der Bezeichnung zu finden: CONVERSATION mit den angegebenen Nachbarknoten. Die Nachbarknoten sind Benutzer mit der Bezeichnung: USER und einer Eigenschaft namens "username". In der Abfrage ist eine Liste von "Benutzername" s gegeben und ein Ziel ist es, einen Konversationsknoten zu finden, der als Nachbar alle Benutzer mit dem Benutzernamen in der gegebenen Liste hat. Ich habe einige Abfragen versucht, aber sie geben nicht zurück, was ich will. Gibt es jemanden, der eine Idee hat, wie die Abfrage aussehen könnte?Cypher gibt einen Knoten mit den angegebenen Nachbarn zurück

Antwort

3

Angenommen, Sie die angegebenen Benutzernamen als {users} Parameter und die Beziehung zwischen den Benutzern sind vorbei und die Gespräche wird IN_CONVERSATION genannt:

MATCH (c:Conversation) 
WHERE ALL(x IN {users} WHERE (:User {name:x})-[:IN_CONVERSATION]->(c)) 
RETURN c 

Wenn Sie die Abfrage durch die Benutzernamen vorbei in den Neo4j Browser testen möchten

WITH ["adam","john","sally"] AS users 
MATCH (c:Conversation) 
WHERE ALL(x IN users WHERE (:User {name:x})-[:IN_CONVERSATION]->(c)) 
RETURN c 

Eine andere Lösung anzupassen ist zuerst die Benutzer auch: für zB können Sie die Parameter mit WITH simulieren

MATCH (u:User) WHERE u.name IN {users} 
MATCH (c:Conversation) 
WHERE ALL(x IN collect(u) WHERE (x)-[:IN_CONVERSATION]->(c)) 
RETURN c 
Verwandte Themen