我有一个具有三个属性的节点,比如创建的东西
create (a:item{type:'detergent', weight:'500g', 'quantity':322})
另一个节点像
create (b:customer{id:'933B3'})
count
节点a
与节点之间应该存在与属性的关系b
。
count = 1
如果关系不存在,我想创建关系,否则通过向其添加 1 来更新其计数值,例如set relationship.count = relationship.count + 1
我可以使用MERGE
,以及ON CREATE
与ON MATCH
此目的。但是,问题在于:MERGE 匹配整个模式,而我只想匹配节点 a 的两个属性而不是所有三个属性。
因此,从技术上讲,我想在
a:item{type:'detergent', weight:'500g'}
和 b:customer{id:'933B3'}
这意味着,无论洗涤剂的数量如何,所有label = item、type = 洗涤剂和重量 = 500g的节点都应该与id = 933B3 的客户有关系。
如果我在节点 a 的两个属性上使用 MERGE,它不会在现有项目节点(具有 3 个属性)和客户节点之间创建关系,而是创建具有在 MERGE 中指定的属性的新节点。如上所述,如果发现关系已经存在,我还需要更新 count 属性。
如何匹配已存在节点的选定属性以在现有节点之间创建具有初始化属性值的关系,否则更新关系的属性值已存在?
使用 MERGE 时,不必指定节点的所有属性。MERGE 就像 MATCH,如果没有找到匹配项,则为 CREATE。肯定有具有这些属性的 :item 节点,并且是否有超出您在 MERGE 中指定的属性的其他属性并不重要。
这应该适合你:
MERGE (a:item{type:'detergent', weight:'500g'})
MERGE (b:customer{id:'933B3'})
MERGE (a)-[r:REL]->(b) // replace with your actual relationship type
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句