我的查询是:
MATCH (n)-[:NT]->(p)
WHERE ...some properties filters...
RETURN n,p
结果在下面的屏幕截图中。
如何计算总节点数?
我需要14作为文本结果。像RETURN COUNT(n)+ COUNT(p)这样的东西,但它显示24。
以下请求无法正常运行:
MATCH (n)-[:NT]->(p)
WHERE ...some properties filters...
RETURN count(n)
返回12,这是图片上关系对的数量,而不是节点。
MATCH (n)-[:NT]-(p)
WHERE ...some properties filters...
RETURN count(n)
返回24。
如何计算具有传出ONLY箭头的两个节点(在此示例中)?应该是14个。
UPD:
MATCH (n)-[:NT]->(p)
WHERE ...
RETURN DISTINCT FILTER(x in n.myID WHERE NOT x in p.myID)
MATCH (n)-[:NT]->(p)
WHERE ...
RETURN DISTINCT FILTER(x in p.myID WHERE NOT x in n.myID)
myID的DISTINCT UNION的COUNT给了我结果。 我不知道如何使用密码。
或DISTINCT UNION of collections:
MATCH (n)-[:NT]->(p)
WHERE ...
RETURN collect(DISTINCT p.myID), collect(DISTINCT n.myID)
结果是:
collect(DISTINCT p.myID)
26375, 26400, 21636, 29939, 20454, 26543, 19089, 4483, 26607, 30375, 26608, 26605
collect(DISTINCT n.myID)
11977, 19478, 20454
这是15项。一个是常见的。如果您使用UNION或DISTINCT 20454
,则总COUNT将为14.图片上的实际节点数。
我无法实现这种简单的模式。
答案 0 :(得分:1)
您的原始查询工作正常。
如果您希望计算不同 n
个节点,则您的查询应为RETURN COUNT(DISTINCT n)
。
计算仅具有传出关系的节点数:
MATCH (n)-->()
WHERE NOT ()-->(n)
COUNT(DISTINCT n);
计算直接涉及:NT
关系的不同节点的数量:
MATCH (n)-[:NT]-()
COUNT(DISTINCT n);
答案 1 :(得分:0)
MATCH (n)-[:NT]->(p)
WHERE ...some properties filters...
WITH collect(DISTINCT p.myID) AS set1
MATCH (n)-[:NT]->(p)
WHERE ...some properties filters...
WITH collect(DISTINCT n.myID) AS set2, set1
WITH set1 + set2 AS BOTH
UNWIND BOTH AS res
RETURN COUNT(DISTINCT res);