Neo4j-避免在密码中的相同节点之间创建多个关系?

时间:2016-01-15 15:40:38

标签: neo4j cypher

如果已在现有节点之间创建,我想限制创建的关系。现在它被多次创建?有没有类似于' merge'的命令?限制重复关系?感谢任何建议

4 个答案:

答案 0 :(得分:1)

创建关系时,用户MERGE而不是CREATE。

MERGE (Product)-[:listed_under_category]->(level3)
MERGE (level3)-[:child_of]->(level2)

答案 1 :(得分:1)

如果我理解您的问题,CREATE UNIQUE可能是您正在寻找的解决方案。例如:

create (a:Ex {name: 'A'})-[r:inside]->(b:Ex {name: 'B'}) return a, b, r

设置您的原始(a) - [] - >(b)关系。然后以你提议的方式扩展关系......

match (a)-[:inside]->(b) where a.name = 'A' and b.name = 'B'
create unique (a)-[:inside]->(b)-[:inside]->(q:Ex {name: 'Q'})
return a, b, q

如果关系不同,CREATE UNIQUE也有效:

match (a)-[:inside]->(b) where a.name = 'A' and b.name = 'B'
create unique (a)-[:inside]->(b)-[:under]->(q:Ex {name: 'Q'})
return a, b, q

答案 2 :(得分:0)

MERGE子句也避免了重复关系。

答案 3 :(得分:0)

嘿,我认为混淆但我需要更多信息。是合并,合并整个声明。所以,如果他没有找到"匹配"对于整个陈述,数据库"创建"整个声明。

所以当你输入类似merge(a)的东西 - [] - >(b) - [] - >(q) 如果你已经有(a) - [] - >(b)

他将重新创建(a) - [] - >(b) - [] - >(q)并且你在db(a) - [] - >(b) - [] - &gt ;(q),(a) - [] - >(b)

但是如果你输入merge(a) - [] - >(b)merge(b) - [] - >(q)

你知道你有节点。如果没有关系,Neo4j合并将创建关系。如果有关系则匹配