我想根据条件为现有节点创建新属性。更具体地说,当节点属性与嵌套JSON数组中的属性匹配时,我想创建一个新的节点属性。我的json结构看起来像这样:
{"some tasks":[
{"id":1,"name":"John Doe"},
{"id":2,"name":"Jane Doe"}
],
"some links":[
{"id":1,"type":"cartoon"}
{"id":2,"type":"anime"}
]
}
我已经创建了具有任务属性的节点-现在,我想遍历链接部分并在ID匹配时更新节点的属性。我尝试像这样使用foreach-
call apoc.load.json("file:///precedence.json")yield value as line
foreach(link in line.link| match (n) where n.id=link.source)
return n
返回错误-
Neo.ClientError.Statement.SyntaxError: Invalid use of MATCH inside FOREACH (line 2, column 28 (offset: 93))
"foreach(link in line.link| match (n) where n.id=link.source)"
那我如何在foreach中检查这种情况?
答案 0 :(得分:1)
您不能在FOREACH中使用MATCH,它只允许更新子句。
相反,您可以UNWIND将列表重新排成行(列表中每个条目将有一行),然后可以根据需要进行MATCH和SET。
我还强烈建议您在查询中使用标签,并确保您在label和id属性中具有索引以进行快速查找。对于本示例,我将使用:Node作为标签(因此对于本示例,索引将具有:Node(id)):
CALL apoc.load.json("file:///precedence.json") yield value as line
UNWIND line.link as link
MATCH (n:Node)
WHERE n.id = link.source
SET n.type = link.type