Neo4j / Cypher密集节点匹配结果排序

时间:2016-08-01 10:49:43

标签: neo4j cypher graph-databases nosql

我有一个(:User)密集节点,其关系如下:

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

如果我执行下面的查询

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

我得到用户订阅的最近订阅的预期。

但是使用其他匹配模式的相同查询会对此排序进行制动

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

有人可以解释为什么最近的排序并没有在第二个例子中起作用。

1 个答案:

答案 0 :(得分:1)

您的查询无法保证订单,因为您没有ORDER子句,运行相同的查询1000次,我确信订单会在某个时刻发生变化。

您应该在查询结束时订购:

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