Neo4j:条件匹配,合并和删除关系

时间:2017-07-21 07:04:46

标签: neo4j

需要Merge的帮助,下面是方案

  • 我有两种类型的节点,标签上写着LEADS和SUBORDINATES,并且它们之间会有关系(LEADS) - [:DEPENDS_ON] - >(SUBORDINATE)。

  • 我正在更新LEADS节点属性需要更新与SUBORDINATES的关系

我的更新查询如下(批量更新)

UNWIND {updates} as lead
MERGE (l:LEADS {id: lead.id})
ON MATCH  SET l += lead.properties
MATCH (subs:SUBORDINATES) WHERE subs.id IN lead.subordinates
MERGE (l)-[:DEPENDS_ON]->(subs)

我知道合并会创建不存在的新关系,但我需要删除任何不存在的旧关系。

如何删除未合并的旧版本?

更新#1

我找到了删除旧关系的方法,如下面

UNWIND {updates} as lead
MERGE (l:LEADS {id: lead.id})
ON MATCH  SET l += lead.properties
MATCH (subs:SUBORDINATES) WHERE subs.id IN lead.subordinates
MERGE (l)-[r:DEPENDS_ON]->(subs)
ON CREATE SET r.lastUpdated = timestamp();
ON MATCH SET r.lastUpdated = timestamp();
MATCH (l)-[r_old:DEPENDS_ON]->(subs) where r_old.lastUpdated < timestamp();
DELETE r_old

现在问题是&#34;不更新关系&#34;当没有更新lead.subordinates时,即不修改subordiantes但修改了lead的某些属性。 我需要更多像关于lead.subordiantes不为空的关系的条件合并

在谷歌搜索后,才知道Neo4j中没有其他类似的方法,但是作为一个带有案例的foreach的工作可以像下面一样使用,但我的问题是MATCH赢得了在foreach中工作

FOREACH(ignoreMe IN CASE WHEN //Put conditions here//
THEN [1] ELSE [] END |//Put instruction here// )

0 个答案:

没有答案