仅设置不存在的属性

时间:2017-02-06 13:50:19

标签: neo4j cypher

我想在我的cypher查询中更新输入映射中的节点,但我只想设置节点中尚不存在的属性(而=会覆盖所有节点的属性和{{1覆盖地图中出现的所有属性。)

例如,如果我有一个节点+=,并且我有一个要更新的地图:

(n {key: "abc", prop1: "value"})

我想要一个与WITH {key: "abc", prop1: "othervalue", prop2: "newvalue"}) AS update_map 匹配的操作,并更新key,而不会覆盖prop2,因此结果将是:prop1

我目前的做法是逐个按键:

(n {key: "abc", prop1: "value", prop2: "newvalue"})

这看起来很棒(可能除了每个键的搜索节点),但遗憾的是不起作用,因为虽然你可以使用UNWIND KEYS(update_map) AS update_map_key MATCH (n {key: update_map.key}) WHERE n[update_map_key] IS NULL SET n[update_map_key] = update_map[update_map_key] 语法获取具有变量名的属性,但你可以不要更新它。

有什么想法吗?如果重要的话,在Neo4j 2.3.7上运行。

1 个答案:

答案 0 :(得分:1)

我认为APOC将在这里工作:apoc.create.setProperty([node,id,ids,nodes],key,value) - 设置节点上的给定属性,虽然我不确定在哪个版本中添加了它。看到: Neo4j: Dynamically add property/Set dynamic property