我有一个具有三个属性的节点,比如说创建类似
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 的节点都应与<无论洗涤剂的量如何,strong> id = 933B3 。
如果我在节点a的两个属性上使用MERGE,它将不会在现有项目节点(具有3个属性)和客户节点之间建立关系,而是会创建具有MERGE中指定属性的新节点。如上所述,如果发现关系已经存在,我还需要更新count属性。
如何匹配已存在节点的选定属性,以初始化属性值来创建已存在节点之间的关系,否则如何更新已存在关系的属性值?
答案 0 :(得分:4)
使用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