【问题标题】:MERGE the results/list in Neo4j using Cypher使用 Cypher 合并 Neo4j 中的结果/列表
【发布时间】:2017-05-01 22:42:00
【问题描述】:

想象一下我的查询结果中的节点具有不同的名称,但在我的下一个查询中,我想在前一个结果的合并版本中进行搜索。如何合并两个列表或两组节点?例如,假设我有

(:class1)-->(c1:class2)-->(:class3)--(:class4)-->(c2:class2)

然后我想根据 c1.name 和 c2.name 合并中的不同元素进行 MATCH。

【问题讨论】:

  • 请更详细地描述并分享您所做的事情。一个模糊问题的模糊答案是,如果您想在下一个查询中使用来自上一个查询的数据,请将中间步骤保存到 Neo4j。
  • @Tomaž Bratanič 抱歉,我更新了描述,希望现在更清楚。

标签: neo4j cypher


【解决方案1】:

我在某处学到的使这项工作发挥作用的诀窍是

MATCH (:class1)-->(c1:class2)-->(:class3)--(:class4)-->(c2:class2)
WITH collect(c1)+collect(c2) as nodez
UNWIND nodez as c
RETURN c

请注意,您不能以这种方式组合不同类型的列表(例如节点+关系)。它们必须都是相同的类型(例如,所有节点或所有关系)。如果要在聚合列表中混合类型,则需要先将所有内容转换为相同类型(可能是映射)。

【讨论】:

  • 如果你 MATCH p1=(:class1)-->(c1:class2) MATCH p2=(:class2)-->(:class3) RETURN collect(p1)+collect(p2) 那么你将拥有节点和关系
  • @digitalillusion 那是路径的集合,而不是节点和关系的集合。我更新了注释,更笼统地说你不能在列表中混合类型。如果您确实需要混合类型,则需要将它们打包在地图或其他东西中以使它们都具有相同的类型。
猜你喜欢
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多