Neo4j: удалить все отношения, кроме тех, что в списке - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь удалить все отношения с узлом, кроме тех, которые находятся в списке. Я уже создал узел (: Person {name: 'John'}) и 4 других узла (: Car). Затем я ОБЪЕДИНЯЮ все автомобильные узлы с персональным узлом. Затем я хочу удалить все отношения для узла человека, за исключением тех, что находятся в списке (показано ниже)

UNWIND [{name:'test1'}, {name:'test2'}] AS test
MATCH (p:Person {name:'John'})
OPTIONAL MATCH (p)-[d:DRIVES]->(c:Car)
WHERE NOT EXISTS((p)-[:DRIVES]->(c:Car {name:test.name}))
DELETE d
RETURN p 

Однако приведенный выше запрос удаляет все отношения, но когда я сокращаю список, чтобы включить только 1 узел автомобиля , указанный выше запрос работает (т.е. запрос работает только тогда, когда список содержит только 1 узел, и не работает, когда список больше). Я не уверен, почему это так.

Я использую neo4j 4.1. Заранее спасибо.

1 Ответ

1 голос
/ 13 июля 2020

Это должно работать:

WITH ['test1', 'test2'] AS tests
MATCH (p:Person {name: 'John'})
OPTIONAL MATCH (p)-[d:DRIVES]->(c:Car)
WHERE NOT c.name IN tests
DELETE d
RETURN p

, а также это:

WITH ['test1', 'test2'] AS tests
MATCH (p:Person {name: 'John'})
FOREACH(x IN [(p)-[d:DRIVES]->(c:Car) WHERE NOT c.name IN tests | d] | DELETE x)
RETURN p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...