Neo4J如果存在属性,则合并节点并创建具有关系的另一个节点

时间:2019-02-25 07:49:17

标签: node.js neo4j cypher

我有一个文档节点,其属性为documentIdname。我需要创建多个“活动”节点,以使每个活动都与具有CONTAINS关系的文档相关,如下所示:

Document-CONTAINS->Activity

现在在Neo4J中,我想编写一个查询,这样它将合并文档节点(如果存在)或创建(如果不存在)。并在同一查询中创建带有CONTAINS关系船的活动。

类似以下内容

merge (d:Document{documentId:100,name:'Doc1'})-[r:CONTAINS]->(a:Activity{name:'ijk'})
return d, a

此查询首次运行时,将创建DocumentActivity节点,还将创建CONTAINS关系。

当我使用不同的活动名称运行相同的查询时,它应该创建新的Activity节点和CONTAINS关系,并且应该合并Document节点。

我想在一个查询中做到这一点。

1 个答案:

答案 0 :(得分:3)

是的,只需将您的节点和关系创建分开即可。

merge (d:Document{documentId:100}) on create set d.name='Doc1'
merge (a:Activity{name:'ijk'})
merge (d)-[:CONTAINS]->(a) 
return d, a

如果您的活动不是全局唯一的,则可以在文档的上下文中合并它们

merge (d:Document{documentId:100}) on create set d.name='Doc1'
merge (d)-[:CONTAINS]->(a:Activity{name:'ijk'})
return d, a