Neo4j Cypher Count 显示节点,而不是关系对或联合集
Neo4j Cypher Count displaying nodes, not relationships pairs Or Union Sets
我的查询是:
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)
Returns我是12,图中是关系对的个数,不是节点。
MATCH (n)-[:NT]-(p)
WHERE ...some properties filters...
RETURN count(n)
Returns24.
如何计算出只有外向箭头的两个节点(在本例中)?应该是 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 给了我结果。
不知道用cypher怎么弄。
或集合的 DISTINCT UNION:
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
总数将是 14。图片上的实际节点数。
我无法实现这个简单的模式。
您的原始查询工作正常。
如果您想获得 distinct n
个节点的计数,您的查询应该 RETURN COUNT(DISTINCT n)
.
统计只有外出关系的节点数:
MATCH (n)-->()
WHERE NOT ()-->(n)
COUNT(DISTINCT n);
计算直接参与 :NT
关系的不同节点的数量:
MATCH (n)-[:NT]-()
COUNT(DISTINCT n);
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);
我的查询是:
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)
Returns我是12,图中是关系对的个数,不是节点。
MATCH (n)-[:NT]-(p)
WHERE ...some properties filters...
RETURN count(n)
Returns24.
如何计算出只有外向箭头的两个节点(在本例中)?应该是 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 给了我结果。 不知道用cypher怎么弄。
或集合的 DISTINCT UNION:
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
总数将是 14。图片上的实际节点数。
我无法实现这个简单的模式。
您的原始查询工作正常。
如果您想获得 distinct n
个节点的计数,您的查询应该 RETURN COUNT(DISTINCT n)
.
统计只有外出关系的节点数:
MATCH (n)-->()
WHERE NOT ()-->(n)
COUNT(DISTINCT n);
计算直接参与 :NT
关系的不同节点的数量:
MATCH (n)-[:NT]-()
COUNT(DISTINCT n);
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);