仅在neo4j中不存在时创建关系

时间:2016-04-20 13:07:28

标签: neo4j

我想在两个节点之间添加关系,但前提是该关系不存在。例如:

node1和node2之间的关系目前存在这些属性:time:41221323,link:www.google.com

我正在尝试添加不同属性的关系,例如:

time:5344241,link:www.google.com

在这种情况下,我想保留关系的原始属性。

3 个答案:

答案 0 :(得分:3)

您可以使用以下CQL查询:

MATCH(a: startNodeLabel {attributes to match start node})
MATCH(m:endNodeLabel {attributes to match end node}) 
MERGE(a)-[:relationshipName]->(m)

如果a和m之间不存在关系,则上述合并语句在节点a和m之间创建关系。

答案 1 :(得分:2)

您需要MERGECREATE UNIQUE子句:

http://neo4j.com/docs/stable/query-merge.html

http://neo4j.com/docs/stable/query-create-unique.html

另请注意,MERGE附加了ON CREATE SETON MATCH SET,因此您可以控制何时设置属性。

我相信如果您将特定属性作为匹配语法的一部分,则只有在所有属性完全匹配时才会创建。

答案 2 :(得分:1)

创建唯一 子句可以达到此目的。 Neo4j Documet说

  

CREATE UNIQUE位于MATCH和CREATE的中间 - 它将匹配   它能做什么,并创造缺失的东西。 CREATE UNIQUE将永远   使图表的变化最小 - 如果它可以使用的部分   现有的图表,它会。

START a=node(...), b=node(...)
CREATE UNIQUE (a)-[r:LIKES]-(b)
return a,b;