CYPHER-以原始顺序返回链接的节点

时间:2019-10-07 12:54:44

标签: graph neo4j cypher

我真的很喜欢Graph&Cypher查询语言的潜在功能(来自RDBMS背景),但是我真的很想了解其中涉及的一些概念!

我正在尝试做的事情感觉应该是相对简单的...我有一个非常简单的系列,五个节点具有父级->子级关系。在我看来,如果要对此进行查询,则应按适当的顺序返回每个节点。这就是它的查询-

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

这是我的查询结果显示为图形的样子-

x-datadog-sampling-priority

但是,一旦查询了上述查询并获得了物理响应,就会以以下顺序表示它-

  • 文件夹4
  • 文件夹5
  • 文件夹3
  • 文件夹2
  • 文件夹1
╒══════════════════════════════════════════════════════════════════════╕
│"folder"                                                              │
╞══════════════════════════════════════════════════════════════════════╡
│{"name":"Folder 4","created_at":"2019-10-07 12:14:07","id":"5b6b3316-e│
│e57-3ca5-8f62-bed81b09ab7b","updated_at":"2019-10-07 12:14:07","parent│
│_folder_id":"2dabecfc-2018-3876-bc01-28922ebbb09d"}                   │
├──────────────────────────────────────────────────────────────────────┤
│{"name":"Folder 5","created_at":"2019-10-07 12:14:07","id":"1d05a36b-a│
│67f-3fe7-a13a-6f12b1a38d26","updated_at":"2019-10-07 12:14:07","parent│
│_folder_id":"5b6b3316-ee57-3ca5-8f62-bed81b09ab7b"}                   │
├──────────────────────────────────────────────────────────────────────┤
│{"name":"Folder 3","created_at":"2019-10-07 12:14:07","id":"2dabecfc-2│
│018-3876-bc01-28922ebbb09d","updated_at":"2019-10-07 12:14:07","parent│
│_folder_id":"a1344b93-ab69-398d-81c5-cb901ff8f0b0"}                   │
├──────────────────────────────────────────────────────────────────────┤
│{"name":"Folder 2","created_at":"2019-10-07 12:14:07","id":"a1344b93-a│
│b69-398d-81c5-cb901ff8f0b0","updated_at":"2019-10-07 12:14:07","parent│
│_folder_id":"a22eca18-57fd-364d-b965-d850724131e8"}                   │
├──────────────────────────────────────────────────────────────────────┤
│{"name":"Folder 1","created_at":"2019-10-07 12:14:07","id":"a22eca18-5│
│7fd-364d-b965-d850724131e8","updated_at":"2019-10-07 12:14:07"}       │
└──────────────────────────────────────────────────────────────────────┘

我该如何订购这些数据,或者我的查询需要完全重写?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试以下查询吗:

myScript

我认为您的问题出在以下事实: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的原因。

请不要忘记,如果您要求数据库找到模式distinct,数据库将为您提供所有可能,因此在您的示例中:

  • (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

相关问题