我想在我的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上运行。
答案 0 :(得分:1)
我认为APOC将在这里工作:apoc.create.setProperty([node,id,ids,nodes],key,value) - 设置节点上的给定属性,虽然我不确定在哪个版本中添加了它。看到: Neo4j: Dynamically add property/Set dynamic property