Neo4j - Чем объясняется предложение «ГДЕ НЕ существует»? - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в Neo4j и прохожу учебное пособие по их знакомству, и меня немного смущает использование предложения «ГДЕ НЕ существует».В учебном пособии показан пример, в котором они хотят вернуть все узлы Person людей, которые написали фильмы, и исключить людей, которые снимали этот фильм.Их запрос для этого:

MATCH (p:Person)-[:WROTE]->(m:Movie) WHERE NOT exists( (p)-[:DIRECTED]->() ) RETURN p.name, m.title

, который возвращает:

p.name m.title "Aaron Sorkin" "A Few Good Men" "Jim Cash" "Top Gun" "David Mitchell" "Cloud Atlas"

Мой запрос для этого:

MATCH (p:Person)-[:WROTE]->(m:Movie) WHERE NOT exists( (p)-[:DIRECTED]->(m) ) RETURN p.name, m.title

, который возвращает:

p.name m.title "Aaron Sorkin" "A Few Good Men" "Jim Cash" "Top Gun" "Nora Ephron" "When Harry Met Sally" "David Mitchell" "Cloud Atlas" "Lana Wachowski" "V for Vendetta" "Lilly Wachowski" "V for Vendetta"

Я проверил отношения графа для «Нора Эфрон», «Лана Вачовски» и «Лилли Вачовски» (которыйне в результате их запроса) и обнаружили, что они написали и произвели фильмы (но не режиссер).Насколько я понимаю, оба запроса должны возвращать один и тот же результат.Мне интересно, почему они дают разные результаты.Любая помощь будет благодарна за объяснение различий.

1 Ответ

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

Эти запросы отличаются друг от друга, они запрашивают разные вещи и возвращают разные результаты.

MATCH (p:Person)-[:WROTE]->(m:Movie)
 WHERE NOT exists( (p)-[:DIRECTED]->() )
 RETURN p.name, m.title

Предложение WHERE в приведенном выше запросе гарантирует, что человек p ничего не направлял (у них нет отношений: DIRECTED от узла p).

MATCH (p:Person)-[:WROTE]->(m:Movie)
 WHERE NOT exists( (p)-[:DIRECTED]->(m) )
 RETURN p.name, m.title

Предложение WHERE в приведенном выше запросе отличается из-за присутствия m в шаблоне, который ссылается на тот же фильмкак в спичке.Этот запрос гарантирует, что фильм, рассматриваемый для этого человека, был написан p, но не направлен p.p возможно, снял какой-то другой фильм, и, может быть, они оба написали и сняли какой-то другой фильм, но для этого фильма m они только его написали, но не сняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...