我想在两个节点之间添加关系,但前提是该关系不存在。例如:
node1和node2之间的关系目前存在这些属性:time:41221323,link:www.google.com
我正在尝试添加不同属性的关系,例如:
time:5344241,link:www.google.com
在这种情况下,我想保留关系的原始属性。
答案 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)
您需要MERGE
或CREATE UNIQUE
子句:
http://neo4j.com/docs/stable/query-merge.html
http://neo4j.com/docs/stable/query-create-unique.html
另请注意,MERGE
附加了ON CREATE SET
和ON 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;