Neo4j Cypher 如何在 APOC neo4j 密码查询中包含 parent 的另一个关系节点
Neo4j Cypher how to include another relationship node of parent in APOC neo4j cypher query
让我们考虑一下
- 无人机(Parent)
- 四轴飞行器 (Child)
- 像素(大Child)
以[: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
上面的密码查询 returns 实际结果集,即它显示了 SUB_CATEGORY 和 TAGGED_TO
的所有关系
现在,如果我以前使用 APOC 程序将其转换为树结构,那么它会跳过 Parent 节点的 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 节点以及 parent 节点吗
在第一个查询中,显示了父节点Drone
和:Part
节点之间的TAGGED_TO
关系,因为启用了浏览器选项Connect result nodes
:
If this is checked, after a cypher query result is retrieved, a second
query is executed to fetch relationships between result nodes.
但实际上结果中没有这种关系,因为match pattern没有考虑到a path with a long zero的可能性。试试这个:
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
让我们考虑一下
- 无人机(Parent)
- 四轴飞行器 (Child)
- 像素(大Child)
- 四轴飞行器 (Child)
以[: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
上面的密码查询 returns 实际结果集,即它显示了 SUB_CATEGORY 和 TAGGED_TO
的所有关系现在,如果我以前使用 APOC 程序将其转换为树结构,那么它会跳过 Parent 节点的 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 节点以及 parent 节点吗在第一个查询中,显示了父节点Drone
和:Part
节点之间的TAGGED_TO
关系,因为启用了浏览器选项Connect result nodes
:
If this is checked, after a cypher query result is retrieved, a second query is executed to fetch relationships between result nodes.
但实际上结果中没有这种关系,因为match pattern没有考虑到a path with a long zero的可能性。试试这个:
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