我试图合并一个节点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::quote
https://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"})