【问题标题】:Neo4j Recursive Query with relationships具有关系的 Neo4j 递归查询
【发布时间】:2021-12-18 06:42:30
【问题描述】:

如果我在 neo4j 图形数据库中管理家谱,我想运行一个查询来检索一个人及其所有后代。我运行以下命令:

MATCH
            (ancestor:Person {name: '<persons name>'}) -
            [:ParentChild*1..] ->    (desc:Person)
        RETURN 
            [ancestor, desc]

这给了我祖先和他们所有的后代,但是关系丢失了。我如何还捕获这些关系,以便以后可以遍历列表并找到列表中任何个人的父母或子女?

我来自关系背景,通常将 parent_id 存储在一个人中,然后将其与每个人对象一起返回。

【问题讨论】:

标签: graph neo4j tree cypher hierarchy


【解决方案1】:

您只需将一对“父/关系/子”作为映射数组返回。

MATCH(ancestor:Person {name:<persons name>})-[:ParentChild*1..]->(desc:Person)
WITH collect(distinct id(desc)) as ids
MATCH (ancestor:Person)-[r:ParentChild]->(desc:Person)
WHERE id(desc) in ids
RETURN {ancestor:ancestor, relationship:r, desc:desc} order by ancestor.name

【讨论】:

  • 你怎么会两次 MATCH 父子关系?这比从第一个 MATCH 中返回所有内容要快吗? @norihide.shimatani
  • 第一个用于收集路径上节点的 id。 (A) 第二个用于在路径(A) 上配对父/子节点。并返回父/子集。 @威尔哈里森
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
相关资源
最近更新 更多