Чего не хватает в этом запросе Cypher? - PullRequest
0 голосов
/ 27 апреля 2020

Я изучаю Cypher, и я создал проект «Расследование преступления» на Neo4j.

Я пытаюсь вернуть в качестве вывода родитель, у которого только два сына / всего дочерей и каждый член семьи должен был совершить преступление. Итак, чтобы получить это на графике, я выполнил этот запрос: отношение

match(:Crime)<-[:PARTY_TO]-(p:Person)-[:FAMILY_REL]->(s:Person)-[:PARTY_TO]->(:Crime)
where size((p)-[:FAMILY_REL]->())=2
return p, s

FAMILY_REL показывает сыновьям отношение Person (p) и PARTY_TO показывает Crime узлы, которые Person зафиксировали.

Предыдущий запрос не работает должным образом. На нем показаны родители с более чем двумя сыновьями, а также сыновья, у которых есть только один сын.

Что не так с логикой c запроса?

1 Ответ

1 голос
/ 27 апреля 2020

SIZE((p)-[:FAMILY_REL]->()) считает всех детей p, включая детей, которые не совершали никаких преступлений.

Этот запрос должен работать лучше, поскольку он учитывает только детей, которые являются преступниками:

MATCH (:Crime)<-[:PARTY_TO]-(p:Person)-[:FAMILY_REL]->(s:Person)-[:PARTY_TO]->(:Crime)
WITH p, COLLECT(s) AS badKids
WHERE SIZE(badKids) = 2
RETURN p, badKids
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...