Neo4j 如何将WHERE子句中的元素条件添加到(弱)连接的组件查询中?

Neo4j 如何将WHERE子句中的元素条件添加到(弱)连接的组件查询中?,neo4j,cypher,Neo4j,Cypher,我想在cypher中找到一个查询,返回图中的弱连接组件,其中包含20到30个元素,至少包含10个属性prop=True的元素 CALL algo.unionFind.stream('User', 'RELATED_WITH', {}) YIELD nodeId,setId WITH setId,count(*) AS size,algo.getNodeById(nodeId) AS node WHERE size >= 20 AND size <= 30 AND ??? RETURN

我想在cypher中找到一个查询,返回图中的弱连接组件,其中包含20到30个元素,至少包含10个属性prop=True的元素

CALL algo.unionFind.stream('User', 'RELATED_WITH', {})
YIELD nodeId,setId
WITH setId,count(*) AS size,algo.getNodeById(nodeId) AS node
WHERE size >= 20 AND size <= 30 AND ???
RETURN node.id,setId

这段代码几乎完成了我想要的功能,也就是说,它查找20到30个元素之间的弱连接组件,但我不知道如何在WHERE子句或WHERE中引入节点的条件???符号。

您遇到的问题之一是count*始终为1,因为您也在按每个节点进行聚合。请记住,Neo4j具有隐含的分组,它将按行中的所有元素分组

在以下情况下,可以使用简单的sumCASE获得prop=True的节点数。。。声明

解决方案:

CALL algo.unionFind.stream('User', 'RELATED_WITH', {})
YIELD nodeId,setId
WITH setId,algo.getNodeById(nodeId) AS node
WITH setId,count(*) as size, 
           collect(node) as nodes,
           sum(CASE WHEN node.prop = True THEN 1 ELSE 0) END as prop_true_count
WHERE size >= 20 AND size <= 30 AND prop_true_count >= 10
UNWIND nodes as n
RETURN n.id,setId

很好用!非常感谢你!!