У меня есть простой родительский/дочерний граф в neo4j. Я хотел бы найти родителей (и его детей) со значением свойства в родительском узле или в дочернем узле. Родитель может иметь (или нет) список детейNeo4j: поиск в дочерних тоже
Я попробовал этот запрос
MATCH (p:Parent)
WHERE p.lastName =~ "(?i).*.*"
RETURN p AS parent, [] as children
UNION
MATCH (p:Parent) - [:REL] -> (c:Child)
WHERE p.lastName =~ "(?i).*1234.*" OR c.name =~ "(?i).*.*"
RETURN p AS parent, c AS collect(children)
, но она не совершенна: этот запрос возвращал не отчетливый результат.
Знаете ли вы, что лучший запрос содержит список родителей и его детей со значением свойства в родительском узле или дочернем узле.
Логика должна быть:
if (p.lastName == x) OR (p.children.name == x)
return p
UPDATE
Я даю вам больше элементов:
Пример:
(p1:Parent { lastName: "AAA" }) no children
(p2:Parent { lastName: "BBB" }) 2 children
(c1:Child { name: "CCC" })
(c2:Child { name: "DDD"})
Если я выполнить этот запрос
MATCH (p:Parent)
OPTIONAL MATCH (p)-[:REL]->(c:Child)
WHERE p.lastName CONTAINS 'DDD' OR c.name CONTAINS 'DDD'
RETURN p AS parent, collect(c) AS children;
Результатом является p1, p2 с c2. Я хотел бы только p2 с c2
Ваш запрос лучше, но не идеален: ваш запрос всегда возвращает весь родительский узел, даже если предложение where не проверено для участника – aGO
Я обновил свой ответ. – cybersam
Это похоже на мой запрос. Единственное различие заключается в том, что вместо = ~ – aGO