1

根据http://docs.neo4j.org/chunked/2.0.0-M03/rest-api-transactional.html上的示例代码,我正在尝试使用 MERGE 语句。

但是当我应用以下语句时:

{
    "statements": [
        {
            "statement": "MERGE (p:PERSON { identification }) ON CREATE p SET { properties } ON MATCH p SET { properties } RETURN p",
            "parameters": {
                "identification": {
                    "guid": "abc123xyz"
                },
                "properties": {
                    "lastName": "Doe",
                    "firstName": "John"
                }
            }
        }
    ]
}

它返回以下 2 个错误:

  • { 鉴别 }

代码:42000,状态:STATEMENT_EXECUTION_ERROR,消息:试图将属性设置为混合类型的集合。列表(地图(guid -> abc123xyz))

  • 设置 { 属性 }

代码:42001,状态:STATEMENT_SYNTAX_ERROR",消息:=' expected butO' found\n\n认为我们应该......</p>

不能这样做(还)还是我错过了什么?

谢谢你的帮助

丹尼尔

4

3 回答 3

1

问题是 MERGE 需要提前知道要搜索的键。传递参数映射隐藏了这一点。

为了达到同样的效果,明确列出每个键。如果您仍想在一张地图中将它们全部传递,您可以执行以下操作:MERGE (p:Person {name: {merge_map}.name, email: {merge_map}.email}).

于 2013-10-01T14:49:46.607 回答
1

看来你发现了一个错误。我在这里报告了这个问题:

https://github.com/neo4j/neo4j/issues/975

于 2013-07-16T18:42:57.033 回答
0

丹尼尔,

我认为您必须以不同的方式使用 SET,如下所示:

MERGE (p:PERSON { identification }) 
ON CREATE p SET p={ properties } 
ON MATCH p SET p={ properties } 
RETURN p

但我不确定这是否会SET覆盖您的所有属性。因此,您可能必须一一指定它们。

{
    "statements": [
        {
            "statement": "MERGE (p:PERSON { guid : {guid} }) 
             ON CREATE p SET p.lastName={lastName},p.firstName={ firstName } 
             ON MATCH  p SET p.lastName={lastName},p.firstName={ firstName }
             RETURN p",
            "parameters": {
               "guid": "abc123xyz",
               "lastName": "Doe",
               "firstName": "John"
            }
        }
    ]
}
于 2013-06-17T23:24:08.253 回答