2016-08-01 18 views
0

ich einen (:User) dichten Knoten mit folgenden Beziehungen haben:Neo4j/Cypher dicht Ergebnisknoten Spiel Bestellung

(:User)-[:SUBSCRIBED]->(:User) 
(:User)-[:CONNECTED]->(:SocialNetwork) 

Wenn ich Abfrage unter

MATCH (u:User {UserId:id}) 
MATCH (u)-[:SUBSCRIBED]->(s) 
RETURN s 

ausführen ich Benutzer-Abonnenten von den letzten bestellt bekommen, die voraussichtlich .

Aber die gleiche Abfrage mit zusätzlichen Anpassungsmuster Bremsen erklären diese Bestellung

MATCH (u:User {UserId:id}) 
MATCH (u)-[:SUBSCRIBED]->(s) 
OPTIONAL MATCH (s)-[:CONNECTED]->(sn) 
RETURN s, COUNT(sn.FriendCount) 

Könnte jemand warum Bestellung durch den letzten nicht im zweiten Beispiel nicht funktioniert.

Antwort

1

Es gibt keine Garantie für die Reihenfolge in Ihrer Abfrage, weil Sie keine ORDER Klausel haben, führen Sie die gleiche Abfrage 1000 mal und ich bin sicher, dass die Reihenfolge irgendwann ändern wird.

Sie sollten am Ende der Abfrage bestellen:

MATCH (u:User {UserId:id}) 
MATCH (u)-[:SUBSCRIBED]->(s) 
OPTIONAL MATCH (s)-[:CONNECTED]->(sn) 
RETURN s, COUNT(sn.FriendCount) 
ORDER BY s.time // ? property representing the time 
+0

erste Abfrage immer von den letzten für dichten Knoten bestellt – drgraduss

+1

Auch für dichte Knoten, die Sie Garantie der Bestellung nicht ohne ausdrückliche 'ORDER' Klausel –