У меня есть следующий запрос шифра:
merge (s:Location {locationID: '72252'})
merge (t:Location {locationID: '99999'})
merge (s)-[:IS_NEXT_TO]-(t)
with s,t optional match (n:Station)-[:IS_IDENTIFIED_BY]-(s)
with s,t,n where n is not null optional match (a:Station)-[:IS_IDENTIFIED_BY]-(t)
with s,t,n,a where a is not null merge (a)-[:IS_NEXT_TO]-(n)
return s,t,n,a
Если необязательные совпадения находят станции, тогда четыре узла успешно возвращаются.
Если, однако, хотя бы один из необязательные совпадения возвращают ноль, они не являются.
Итак, я попробовал следующее:
merge (s:Location {locationID: '72252'})
merge (t:Location {locationID: '99999'})
merge (s)-[:IS_NEXT_TO]-(t)
with s,t optional match (n:Station)-[:IS_IDENTIFIED_BY]-(s)
optional match (a:Station)-[:IS_IDENTIFIED_BY]-(t)
with s,t,n,a,
{ fromLocation: s.locationID, toLocation: s.locationID,
fromStation: CASE WHEN n is not null then n.crs else 'no station' end,
toStation: case when a is not null then a.crs else 'no station' end
} as details
where a is not null and n is not null merge (a)-[:IS_NEXT_TO]-(n)
return details
В обоих случаях, когда необязательное совпадение возвращает ноль, браузер Neo4j просто говорит Added 1 label, created 1 node, set 1 property, created 1 relationship, completed after 4 ms.
вместо того, чтобы показывать мне узлы. Так что он выполняет работу, просто не показывая мне результаты.
Я предполагаю, что проблема в том, что предложение where отфильтровывает мой возвращаемый объект, но я не знаю, как обойти это?