Я работаю над запросом к базе данных фильмов, чтобы проверить кратчайшие пути между n узлами.В этом упрощенном примере нам нужны все кратчайшие пути между двумя фильмами:
match p=allShortestPaths((n)-[*]-(m)) where id(n) = 87 and id(m) = 121
return p;
Теперь я хочу получитьвсе кратчайшие пути, в которые не входит Киану Ривз.Я попробовал это:
match p=allShortestPaths((n)-[*]-(m)) where id(n) = 87 and id(m) = 121 and NONE(n in nodes(p) where n.name = "Keanu Reeves")
return p;
Однако загрузка занимает целую вечность, даже после того, как я проиндексировал поле имени Person ...
Затем In попробовалследующее:
match p=allShortestPaths((n)-[*]-(m)) where id(n) = 87 and id(m) = 121
with p WHERE NONE(n in nodes(p) where n.name = "Keanu Reeves")
return p;
Это, однако, не дает мне никаких результатов.Я неверно истолковал это, думая, что он просто вернет те пути, между которыми нет Киану Ривза:
(no changes, no records)
Я проверил, смогу ли я получить только те, у которых Киану Ривз междуфункция any()
.Это прекрасно работает:
match p=allShortestPaths((n)-[*]-(m)) where id(n) = 87 and id(m) = 121
with p WHERE ANY(n in nodes(p) where n.name = "Keanu Reeves")
return p;
Каков наилучший подход для решения этой проблемы?Должен сказать, что мой производственный запрос гораздо сложнее, но все сводится к этой проблеме.Это должно быть эффективное решение.