我想知道是否有另一种方法可以做到这一点,因为当我尝试使用对象设置一组属性时,它显然不起作用。
一个例子是我创建了一个引用节点 create (t:Reference {name: 'reference'})
。
然后我收到了一些属性,我想在与 Reference
节点有关系的节点中设置这些属性。
匹配(引用:引用)
其中 ref.name = '引用'
有引用
合并 (t:Test {uuid: '123'})-[:merge_test]->(ref)
创建集 t = {name1: '一个名称', name2: '另一个名称'}, t.created = timestamp(), t.updated = timestamp()
匹配集 t.updated = timestamp()
返回t
您可能会认为运行上述密码两次,第一次最初会创建它,第二次只会更新 t:Test 的 updated
属性,但这不是在这种情况下,每次都会创建一个新的,就好像合并从未检测到 uuid
匹配一样。
我已经从 on create
中删除了 t = {name1: 'a name', name2: 'another name'}
并且它按预期工作,第二次运行将更新 updated
属性,而不是创建新的 :Test
节点。 IE:
匹配(引用:引用)
其中 ref.name = '引用'
有引用
合并 (t:Test {uuid: '123'})-[:merge_test]->(ref)
创建时设置 t.name1 = '一个名称', t.name2 = '另一个名称', t.created = timestamp(), t.updated = timestamp()
匹配集 t.updated = timestamp()
返回t
但这对我不起作用,因为我在我的集合中收到一组没有时间戳的混合属性,并希望使用 t = {my_main_properties} 集合来设置它。
想知道这是 Cypher 中的错误还是我完全错过了文档中的某些内容?如果有的话,解决方法是什么?
使用 Neo4j 2.1.3
最佳答案
我想我刚刚明白这里发生了什么,此操作的创建阶段不会设置 uuid,因此第二次将再次创建。所以就好像:
创建集 t = { params }
清除合并中定义的属性:
合并 (t:测试 {uuid: '123'})-[:...
此处 uuid 被创建时删除。
解决方法是也在 params
对象中定义它。
关于Neo4j 密码合并与创建对象属性不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307541/