Neo4j 如何在foreach中设置动态属性?

Neo4j 如何在foreach中设置动态属性?,neo4j,Neo4j,我一直在使用apoc成功地设置动态属性,但无法在foreach中使用apoc 相当于我想做的事情: MATCH (n:Label {id: {id}}) MERGE (n)-[rel:HAS_RELATIONSHIP]->(UniqueNode:UniqueLabel) WITH DISTINCT rel, ["DynamicProp1", "DynamicProp2", "DynamicProp3", &quo

我一直在使用apoc成功地设置动态属性,但无法在foreach中使用apoc

相当于我想做的事情:

   MATCH (n:Label {id: {id}})
   MERGE (n)-[rel:HAS_RELATIONSHIP]->(UniqueNode:UniqueLabel)
   WITH DISTINCT rel, ["DynamicProp1", "DynamicProp2", "DynamicProp3", "LongListWouldRatherNotDoOneAtATime"] as list
   FOREACH (x in list | 
            FOREACH (o IN CASE WHEN NOT EXISTS(rel[x]) THEN [1] ELSE [] END |
                SET rel[x]=false))
由于无法使用SET rel[x]=false,因此必须使用

CALL apoc.create.setRelProperty(rel, x, false)
但我不想用它在一个论坛上。。。
有办法做到这一点吗?蒂亚

您可以使用“展开”来获取列表中每个元素的行,如果键不存在,则进行筛选,然后使用APOC进行设置

MATCH (n:Label {id: {id}})
MERGE (n)-[rel:HAS_RELATIONSHIP]->(UniqueNode:UniqueLabel)
WITH rel
UNWIND ["DynamicProp1", "DynamicProp2", "DynamicProp3", "LongListWouldRatherNotDoOneAtATime"] as propKey
WITH rel, propKey
WHERE NOT EXISTS(rel[propKey])
CALL apoc.create.setRelProperty(rel, propKey, false)
RETURN count(*)

很漂亮,谢谢。我希望我可以保留我的起始节点,但我想这可能是下一个版本的…您可以保留
n
UniqueNode
的范围,只需将它们包含在WITH子句中即可。