Cyper Merge на необязательном совпадении - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь проверить, существует ли узел: Клиент на основе отношений в моем необязательном совпадении.Затем я хочу создать отношения с моим клиентом, если у него есть заказ.Я не уверен, каков правильный синтаксис для этого.

MERGE (o:Order {account: 'j593jfsh', id: '35353'})
OPTIONAL MATCH (c:Customer)-[:HAS_ORDER]->(o)
MERGE (c)-[:HAS_SESSION]->(s)
MERGE (c)-[:HAS_ORDER]->(o)
WHERE c IS NOT NULL"

1 Ответ

0 голосов
/ 14 февраля 2019

Один из способов сделать это - использовать понимание шаблона вместо ФАКУЛЬТАТИВНОГО МАТЧА.Это позволит собрать всех клиентов, имеющих заказы, в список, и тогда вы сможете использовать FOREACH, чтобы MERGE отношения.Если клиентов нет, список будет пустым, и FOREACH будет нечего обрабатывать.

...
MERGE (o:Order {account: 'j593jfsh', id: '35353'})
WITH o, s, [(c:Customer)-[:HAS_ORDER]->(o) | c] as customers
FOREACH (c in customers | 
 MERGE (c)-[:HAS_SESSION]->(s)
 MERGE (c)-[:HAS_ORDER]->(o)
)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...