Neo4j cypher在创建对象属性时与合并不匹配
我想知道是否还有其他方法可以做到这一点,因为当我试图用一个对象设置一组属性时,它显然不起作用 例如,我创建了一个引用节点Neo4j cypher在创建对象属性时与合并不匹配,neo4j,cypher,Neo4j,Cypher,我想知道是否还有其他方法可以做到这一点,因为当我试图用一个对象设置一组属性时,它显然不起作用 例如,我创建了一个引用节点create(t:reference{name:'reference'}) 然后我接收到一些属性,比如说,我想在一个与Reference节点有关系的节点中设置这些属性 匹配(参考:参考) 其中ref.name='reference' 带参考号 merge(t:Test{uuid:'123'})-[:merge\u Test]->(ref) 在创建集时,t={name1:'一个
create(t:reference{name:'reference'})
然后我接收到一些属性,比如说,我想在一个与Reference
节点有关系的节点中设置这些属性
匹配(参考:参考)
其中ref.name='reference'
带参考号
merge(t:Test{uuid:'123'})-[:merge\u Test]->(ref)
在创建集时,t={name1:'一个名称',name2:'另一个名称'},t.created=timestamp(),t.updated=timestamp()
在匹配集t.updated=timestamp()上
返回t
您可能会认为运行上述密码2次,第一次会首先创建它,第二次只会更新t:Test的updated
属性,但事实并非如此,每次都会创建一个新的密码,就好像合并从未检测到uuid
匹配一样
我已经从create上的中删除了t={name1:'a name',name2:'other name'}
,它按预期工作,即第二次运行将更新updated
属性,而不是创建新的:Test
节点。即:
匹配(参考:参考)
其中ref.name='reference'
带参考号
merge(t:Test{uuid:'123'})-[:merge\u Test]->(ref)
在创建集合时,t.name1='a name',t.name2='other name',t.created=timestamp(),t.updated=timestamp()
在匹配集t.updated=timestamp()上
返回t
但这对我来说不起作用,因为我在我的集合中接收到一组没有时间戳的混合属性,并希望用t={my_main_properties}集合来设置它
想知道这是Cypher中的一个bug还是我完全错过了文档中的某些内容?如果两者中有一个,那么解决办法是什么
使用Neo4j 2.1.3,我想我刚刚了解了这里发生的事情,该操作的创建阶段不会设置uuid,因此第二次将再次创建uuid。所以这就好像:
关于创建集t={params}
清除合并中定义的属性:
合并(t:Test{uuid:'123'})-[:。。。
在这里,uuid被创建时删除
解决方法是在params
对象中定义它。还有t+={params}