首页 > 解决方案 > Neo4j 如何查询所有子节点

问题描述

在此处输入图像描述

在图片中,您可能会看到一个图表示例。如果我做查询

MATCH (u:UserNode)-[:PROMOTER_OF]->(c:UserNode)
where u.promoterName="Antal"
RETURN u;

我只得到 MAIEREAN 的结果。但是如果我扩展 MAIEREAN,我可以看到拥有 MESTER、NICA 和 SOMOGYI 的 SAMOILA 等等……

我想知道:从 Antal 开始,我如何编写查询以显示从第一个到最后一个的所有子、孙、曾孙等?(仅供参考:我事先不知道层次结构有多长)。

我知道像 OPTIONAL MATCH 这样的东西,所以我尝试了这个

Match (u:UserNode)
WHERE u.promoterName="Antal"
OPTIONAL MATCH (u)-[:PROMOTER_OF]->(c:UserNode)
RETURN c;

但它会返回相同的

标签: neo4jcypher

解决方案


也许您正在寻找:

MATCH (u:UserNode{promoterName:"Antal"})-[:PROMOTER_OF*]->(c:UserNode)
RETURN c;

您可以将数字与星号(例如 PROMOTER_OF* 3)或范围(例如 PROMOTER_OF* 1..5)一起添加。如果您有大量数据,我不建议您使用裸星号。


推荐阅读