我有兴趣使用以下模式从我的 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
注意:应考虑使用标签和可能的索引来帮助加快查询速度。