【发布时间】:2016-01-15 15:40:38
【问题描述】:
如果已经在现有节点之间创建了关系,我想限制创建关系。现在它被创建了多次?是否有任何类似于“合并”的命令来限制重复关系?感谢您的任何建议
【问题讨论】:
如果已经在现有节点之间创建了关系,我想限制创建关系。现在它被创建了多次?是否有任何类似于“合并”的命令来限制重复关系?感谢您的任何建议
【问题讨论】:
在创建关系时使用 MERGE 而不是 CREATE。
MERGE (Product)-[:listed_under_category]->(level3)
MERGE (level3)-[:child_of]->(level2)
【讨论】:
嘿,我认为混淆了,但我需要更多信息。就是合并,合并整个语句。因此,如果他没有为整个语句找到“匹配”,则数据库“创建”整个语句。
所以当你输入类似 merge (a)-[]->(b)-[]->(q) 如果你已经有 (a)-[]->(b)
他将重新创建 (a)-[]->(b)-[]->(q) 并且您在数据库中有 (a)-[]->(b)-[]->(q) , (a)-[]->(b)
但是如果你输入merge (a)-[]->(b) merge(b)-[]->(q)
你知道你有节点。如果没有关系,Neo4j 合并将创建关系。如果有关系则匹配
【讨论】:
如果我理解您的问题,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
【讨论】:
MERGE 子句还可以避免重复关系。
【讨论】: