Graph CYPHER-按原始顺序返回链接节点
我真的很享受Graph&Cypher查询语言(来自RDBMS背景)的潜在功能,但我真的很难理解其中的一些概念 我尝试做的事情感觉应该相对简单。。。我有一个非常简单的五个节点的系列,具有父->子关系。在我看来,如果我要查询这个,每个节点都应该按适当的顺序返回。以下是目前的问题-Graph CYPHER-按原始顺序返回链接节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,我真的很享受Graph&Cypher查询语言(来自RDBMS背景)的潜在功能,但我真的很难理解其中的一些概念 我尝试做的事情感觉应该相对简单。。。我有一个非常简单的五个节点的系列,具有父->子关系。在我看来,如果我要查询这个,每个节点都应该按适当的顺序返回。以下是目前的问题- MATCH p = (:Folder)-[:CHILD*]->(f:Folder { id: '1d05a36b-a67f-3fe7-a13a-6f12b1a38d26' }) WITH NODES(p) AS f
MATCH p = (:Folder)-[:CHILD*]->(f:Folder { id: '1d05a36b-a67f-3fe7-a13a-6f12b1a38d26' })
WITH NODES(p) AS folders
UNWIND folders as folder
WITH folder RETURN DISTINCT folder
以下是我的查询结果的图形-
但是,一旦使用上述查询进行查询并获得物理响应,它将按以下顺序表示-
- 文件夹4
- 文件夹5
- 文件夹3
- 文件夹2
- 文件夹1
谢谢 你能试试这个查询吗:
MATCH p = (n:Folder)-[:CHILD*]->(f:Folder { id: '1d05a36b-a67f-3fe7-a13a-6f12b1a38d26' })
WHERE NOT ()-[:CHILD]->(n)
WITH NODES(p) AS folders
RETURN folders
我认为您的问题来自于存在多个路径p
,这就是为什么您使用了独特的
不要忘记,如果您要求数据库查找模式(n:Folder)-[:CHILD*]->(f:Folder{id:'1d05a36b-a67f-3fe7-a13a-6f12b1a38d26'})
,数据库将为您提供所有的可能性,因此在您的示例中:
F4->F5
F3->F4->F5
F2->F3->F4->F5
F1->F2->F3->F4->F5
如果你在这个结果集上做了一个distinct
,是的,你得到了结果F4、F5、F3、F2、F1
你能试试这个查询吗:
MATCH p = (n:Folder)-[:CHILD*]->(f:Folder { id: '1d05a36b-a67f-3fe7-a13a-6f12b1a38d26' })
WHERE NOT ()-[:CHILD]->(n)
WITH NODES(p) AS folders
RETURN folders
我认为您的问题来自于存在多个路径p
,这就是为什么您使用了独特的
不要忘记,如果您要求数据库查找模式(n:Folder)-[:CHILD*]->(f:Folder{id:'1d05a36b-a67f-3fe7-a13a-6f12b1a38d26'})
,数据库将为您提供所有的可能性,因此在您的示例中:
F4->F5
F3->F4->F5
F2->F3->F4->F5
F1->F2->F3->F4->F5
如果你在这个结果集上做一个distinct
,是的,你得到的结果是F4,F5,F3,F2,F1
,就这么简单!因此,NOT
子句是这里的修复方法,但我不明白它是如何解决的?这实际上是说获取最后一个文件夹到父文件夹,但不匹配与最后一个文件夹的任何其他关系吗?非常感谢你的帮助!在这里,我要对数据库说,节点n
是路径的根节点(即,没有任何传入的子节点
关系)。所以只有一条匹配的路径,不像我在答案中描述的那么多。非常感谢你的帮助。它现在有意义了——我不知道它返回了许多可能性!就这么简单!因此,NOT
子句是这里的修复方法,但我不明白它是如何解决的?这实际上是说获取最后一个文件夹到父文件夹,但不匹配与最后一个文件夹的任何其他关系吗?非常感谢你的帮助!在这里,我要对数据库说,节点n
是路径的根节点(即,没有任何传入的子节点
关系)。所以只有一条匹配的路径,不像我在答案中描述的那么多。非常感谢你的帮助。它现在有意义了——我不知道它返回了许多可能性!