根据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 but
O'发现\ n \ n我们应该......
这可不是这样做的(还是)或者我错过了什么?
感谢您的帮助
丹尼尔
答案 0 :(得分:1)
好像你发现了一个错误。我在这里报告了这个问题:
答案 1 :(得分:1)
问题是MERGE需要提前知道您要搜索的密钥。传递参数图可以隐藏它。
要实现相同目的,请明确列出每个键。如果您仍希望将它们全部传递到一个地图中,则可以执行以下操作:MERGE (p:Person {name: {merge_map}.name, email: {merge_map}.email})
。
答案 2 :(得分:0)
Daniel,
我认为你必须使用不同的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"
}
}
]
}