Neo4j 密码合并与创建对象属性不匹配

标签 neo4j cypher

我想知道是否有另一种方法可以做到这一点,因为当我尝试使用对象设置一组属性时,它显然不起作用。

一个例子是我创建了一个引用节点 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/

相关文章:

neo4j - 跟踪 Neo4j 中的更改 - 在标准编程中实现诸如 "flag"变量之类的功能

java - Java应用程序中的Neo4j查询:No result is displaying[Still fail to solve it]

java - Neo4j - 服务器返回 HTTP 响应代码 : 500 for URL: http://localhost:7474/db/data/cypher

neo4j - 在 Neo4j 中为每个查询返回前 n 个结果

neo4j - 一个密码查询中的多个 CREATE INDEX ON

neo4j - 检查节点是否存在,如果不存在则创建

java - Neo4J 关系中的合并

带有参数映射的 neo4j cypher set 语句

java - 使用java程序更新neo4j数据库

X 染色体祖先的 Neo4j 密码查询