繁体   English   中英

Neo4j cypher如何在APOC neo4j cypher查询中包含父对象的另一个关系节点

[英]Neo4j Cypher how to include another relationship node of parent in APOC neo4j cypher query

让我们考虑

  • 无人机(父母)
    • 直升机(儿童)
      • 像素(大孩子)

以[:SUB_CATEGORY]作为关系节点 在此处输入图片说明

在Cypher查询下面,以获取带有每个节点标记的部分

MATCH p=(n:Category)-[:SUB_CATEGORY*]->(m)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
RETURN ps

上面的密码查询返回实际结果集,即它显示了SUB_CATEGORY和TAGGED_TO的所有关系

在此处输入图片说明

现在,如果我以前使用APOC程序将其转换为Tree结构,那么它将跳过父节点的TAGGED_TO关系节点,即Drone

MATCH p=(n:Category)-[:SUB_CATEGORY*]->(m)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) YIELD value
RETURN value

您能给我建议使用APOC获取所有节点的TAGGED_TO节点以及父节点吗

在第一个查询中,由于启用了浏览器选项“ Connect result nodes显示了父节点Drone:Part节点之间的TAGGED_TO关系:

如果选中此选项,则在检索密码查询结果之后,将执行第二个查询以获取结果节点之间的关系。

但是实际上结果中没有这种关系,因为匹配模式未考虑路径具有长零的可能性。 尝试这个:

MATCH p=(n:Category)-[:SUB_CATEGORY*0..]->(m:Category)<-[:TAGGED_TO]-(part:Part)
WHERE NOT ()-[:SUB_CATEGORY]->(n) AND toLower(part.name) STARTS WITH toLower('atm')
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) YIELD value
RETURN value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM