Neo4j Cypher Count显示节点,而不是关系对或联合集

时间:2015-01-19 05:50:37

标签: neo4j cypher

我的查询是:

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个。

my example

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.图片上的实际节点数。

我无法实现这种简单的模式。

2 个答案:

答案 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);