如何在图形中查询节点,其中直接连接到它的节点满足条件



我有兴趣使用以下模式从我的 Neo4j 图中收集节点

match (a)-[r:reln]->(b) return b 

这样给定"b"的所有"a"节点都满足某些条件,例如a.prop='xxxx'

注意:可能有多种类型的关系:一对"a"和"b"节点之间的reln。

我尝试使用all()功能,但这似乎没有帮助。

可以使用列表推导式从列表pts创建所需属性的列表,如下所示:

MATCH (a)-[:reln]->(b) 
WITH collect(a) as pts, b 
WHERE all(pt IN pts WHERE pt.prop = 'xxxx')  
RETURN b.prop, [ p IN pts | { prop1: p.prop1, prop2:p.prop2 }] AS a_props

如果您希望针对每个b节点获取a属性对:

MATCH (a)-[:reln]->(b) 
WITH collect(a) as pts, b 
WHERE all(pt IN pts WHERE pt.prop = 'xxxx') 
UNWIND pts AS a
RETURN b.prop, { prop1: a.prop1, prop2:a.prop2 } AS a_props

MATCH (a)-[:reln]->(b) 
WITH collect(a) as pts, b 
WHERE all(pt IN pts WHERE pt.prop = 'xxxx') 
UNWIND pts as a
RETURN b.prop, a.prop, a.prop2

获取开始节点具有等于 'xxxx' 的prop属性的所有reln关系的结束节点:

MATCH (a)-[:reln]->(b)
WHERE a.prop = 'xxxx'
RETURN a, b

如果要返回开始节点的某些单个属性,只需在RETURN子句中指定它们。例如:

...
RETURN a.prop, a.prop2, a.prop3, b

注意:应考虑使用标签和可能的索引来帮助加快查询速度。

最新更新