Neo4J - Cypher Query, использующий функцию Predicate, не получает желаемый результат - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в Neo4j и Cypher и пытаюсь вытащить все города, в которых нет даже одной больницы, предлагающей лечение онкологии. Я написал ниже запрос с использованием функции ALL (), однако он даже возвращает те города, в которых есть хотя бы одна больницакоторые не предлагают лечение онкологии

MATCH Y= (p:Procedure)-[:DONE_AT]->(h:Hospital)-->(g:Cities) 
WHERE ALL(x in nodes(Y) WHERE p.Procedure_Name<>'ONCOLOGY')
RETURN g, h

Я знаю, что когда мы смотрим на шаблон в пути Y, он может возвращать правильный вывод, но мне нужна помощь по моему требованию

Спасибо, что изучили его..

1 Ответ

0 голосов
/ 10 октября 2018

Ваш текущий запрос соответствует путям, состоящим из одного: процедуры, одного: больницы и одного: города в каждом пути, что объясняет, почему вы получаете результаты, которые видите.Подход WHERE all() не будет работать для этого, потому что вы запускаете его для каждого пути, поэтому он проверяет, что p, h и g не имеют процедуры онкологии, и я довольноуверен, что вы имели в виду, что он применяется только ко всем процедурам в каждой больнице.

Лучший способ добиться этого - использовать больницы, в которых нет процедуры онкологии, подобной этой:

MATCH (h:Hospital)
WHERE NOT (:Procedure{Procedure_Name:'ONCOLOGY'})-[:DONE_AT]->(h)
MATCH (h)-->(g:Cities) 
RETURN h, g

Если вы ищете только города без больницы, где проводилось лечение онкологии, вы можете использовать это:

MATCH (g:Cities)
WHERE NOT (:Procedure{Procedure_Name:'ONCOLOGY'})-[:DONE_AT]->(:Hospital)-->(g)
RETURN g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...