带有特殊标识符的 apop .merge.node失败



我试图合并一个节点apop .merge.node,但我的身份属性键有一个特殊的字符(:),并得到双重转义。是我错过了什么,还是有解决办法?如果我替换":"与"_"一切正常

Neo4j 4.2.1社区和APOC 4.2.0

CALL apoc.merge.node(["test"], apoc.map.fromPairs([["i:d","123"]])) YIELD node return node

误差

Failed to invoke procedure `apoc.merge.node`: Caused by: org.neo4j.exceptions.SyntaxException: Invalid input 'i': expected "}" (line 1, column 17 (offset: 16))
"MERGE (n:test{``i:d``:$identProps.``i:d``}) ON CREATE SET n += $onCreateProps ON MATCH SET n += $onMatchProps RETURN n"

EDIT

似乎在APOC中有一个错误,导致标识符被编码两次。

首先用Util::quotehttps://github.com/neo4j-contrib/neo4j-apoc-procedures/blob/4.1/core/src/main/java/apoc/util/Util.java#L674

然后在合并过程https://github.com/neo4j-contrib/neo4j-apoc-procedures/blob/4.1/core/src/main/java/apoc/merge/Merge.java#L85

我已经提交了一个问题:https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues/1783


在Neo4j中,您可以使用反引号'在包含特殊字符的键周围:

CALL apoc.merge.node(["test"], apoc.map.fromPairs([["`i:d`","123"]])) 
YIELD node 
return node

在Cypher语法中也是如此,用空格转义标签,例如:

MERGE (n:`Land Vehicle` {id: "land-rover-1"})

最新更新