2016-09-23 69 views
0

我正在开发一个小型项目,我必须在twitter之类的用户之间进行维护。我试图做一个返回某个节点的追随者的查询,我们称之为“X”节点。因此,查询返回“X”的追随者和“X”追随者追随者的数量以及追随者“X”追随者的数量,其中包括该计数中的“X”。抱歉的文字游戏。让我们看看与图像的例子:Neo4J Cypher - 匹配节点的计数关系

我有以下节点:

Nodes

而且我想知道节点2的所有追随者和我的追随者前面提到的计数。我创建了一个查询:

MATCH (:User{id:2})<-[:Follows]-(followers) 
OPTIONAL MATCH (followers)-[r1:Follows]->(:User) 
OPTIONAL MATCH (:User)-[r2:Follows]->(followers) 
RETURN followers.id, count(r1) AS Follows, count(r2) AS Following; 

但它在两个值失败:节点数量的节点1以下,并随后节点6个节点的计数: enter image description here

在这里你可以看到所有的关系: enter image description here

任何帮助将不胜感激。谢谢。

回答

2

我认为你的两个选择性匹配会导致一些重复的结果(考虑每个阶段的输出与所涉及的变量...多个行匹配,每个跟随者跟随一个跨产品的所有人每个跟随者的行匹配)。

虽然你可以通过每个可选赛后组装您的数据(获得计数)解决这个问题,一个更好的办法是使用可选火柴开关,而是直接与大小函数获得的数量关系:

MATCH (:User{id:2})<-[:Follows]-(followers) 
RETURN followers.id, SIZE((followers)-[:Follows]->()) AS Follows, SIZE(()-[:Follows]->(followers)) AS Following 
+0

天啊,谢谢!它像一个魅力一样工作! – Guolf3377

相关问题