Как перебрать вложенный массив json и изменить свойства узла в зависимости от условия? - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу создать новые свойства для ранее существующего узла на основе условия.Чтобы быть более точным, я хочу создать новое свойство узла, когда свойство узла совпадает со свойством во вложенном массиве JSON.Моя структура json выглядит примерно так:

{"some tasks":[
        {"id":1,"name":"John Doe"},
        {"id":2,"name":"Jane Doe"}
    ],
 "some links":[
        {"id":1,"type":"cartoon"}
        {"id":2,"type":"anime"}
    ]
}

Я уже создал узлы со свойствами из задач - теперь я хочу перебрать часть ссылок и обновить свойства узла, когда идентификаторы совпадают.Я попытался использовать foreach как so-

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?

1 Ответ

1 голос
/ 06 апреля 2019

Вы не можете использовать MATCH внутри FOREACH, он только позволяет обновлять предложения.

Вместо этого вы можете UNWIND вернуть список обратно в строки (у вас будет строка для каждой записив списке), тогда вы можете СОГЛАСОВАТЬ и УСТАНОВИТЬ при необходимости.

Я также настоятельно рекомендую использовать метки в своем запросе и убедиться, что у вас есть индекс в свойстве 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...