如果某些条件满足,则将neo4j关系合并为一,同时返回结果

时间:2014-07-14 10:27:04

标签: merge neo4j cypher

我的用例是:

我必须在结果中返回整个图形,但条件是

  • 如果在同一方向的两个特定节点之间存在多个关系,那么我必须将其合并为1个关系。例如:让我们说有两个节点' m'和' n'并且在这些节点之间有3个关系,比如说r1,r2,r3(在同一个方向上),然后当我在触发密码查询后得到结果时,我应该只得到1个关系' n'和' m'

  • 我需要在它之上执行一些操作,就像我们从合并所有关系得到的结果关系应该包含​​我想要保留的属性及其值。实际上,我将保留合并的任何一个关系的所有属性,具体取决于作为关系属性之一的时间戳字段。

  • 注意:我在所有关系中都拥有相同的属性(属性的数量和属性的名称在所有关系中都是相同的。值可能会有所不同)

任何帮助将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:0)

你的意思是这样的吗?

删除除第一个

以外的所有内容
MATCH (a)-[r]->(b)
WITH a,b,type(r) as type, collect(r) as rels
FOREACH (r in rels[1..] | DELETE r)

按时间戳排序

MATCH (a)-[r]->(b)
WITH a,r,b
ORDER BY r.timestamp DESC
WITH a,b,type(r) as type, collect(r) as rels
FOREACH (r in rels[1..] | DELETE r)

如果您想在查询结果上进行所有这些操作,请使用您选择的编程语言进行操作。