gpt4 book ai didi

neo4j - cypher 将节点和关系组合到单个列中

转载 作者:行者123 更新时间:2023-12-02 20:47:46 26 4
gpt4 key购买 nike

因此,作为 this question 的复杂化,我基本上想做

匹配(n:测试)可选匹配(n)-[r]->()返回不同的n,r

我想将 n 和 r 作为一列返回,没有重复值。然而,运行

匹配 (n:TEST) 可选匹配 (n)-[r]->() UNWIND n+r AS x RETURN DISTINCT x

给出“类型不匹配:预期为列表,但为关系(第 1 行,第 47 列)”错误。还有这个查询

MATCH (n:TEST) RETURN DISTINCT n UNION MATCH ()-[n]->() RETURN DISTINCT n

将节点和关系放在同一列中,但第一场比赛的上下文在下半场丢失。

那么如何将所有匹配的节点和关系作为一个最小列表返回?

更新:

这是我正在使用的答案查询的最终修改版本

匹配(n:测试)
可选匹配 (n)-[r]->()
RETURN n {.*, rels:collect(r {属性:属性(r), id:id(r), 类型:type(r), startNode:id(startNode(r)), endNode:id(endNode(r) ))})} 作为 n

最佳答案

有几种方法可以处理这个问题,具体取决于您是否想要将它们保留在列表中或 map 中,或者是否希望节点的 map 投影包含其关系。

如果您使用 Neo4j 3.1 或更高版本,则 map projection可能是最简单的方法。使用它,我们可以输出节点的属性并将其关系作为收集的属性包含在内:

MATCH (n:TEST) 
OPTIONAL MATCH (n)-[r]->()
RETURN n {.*, rels:collect(r)} as n

如果您希望每一行都是其自己的节点配对及其单个关系作为列表,则可以执行以下操作:

...
RETURN [n, r] as pair

作为 map :

...
RETURN {node:n, rel:r} as pair

编辑

就从每个关系返回更多数据而言,如果您检查“代码结果”选项卡,您将看到包含 ID、关系类型以及开始和结束节点 ID,并且可以从后端代码访问这些数据。

但是,如果您想显式返回此数据,那么我们只需将其包含在查询中,为每个关系使用另一个 map 投影:

MATCH (n:TEST) 
OPTIONAL MATCH (n)-[r]->()
RETURN n {.*, rels:collect(r {.*, id:id(r), type:type(r), startNode:startNode(r), endNode:endNode(r)})} as n

关于neo4j - cypher 将节点和关系组合到单个列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43590778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com