Я моделирую набор узлов, который имеет некоторые иерархические отношения (как отношения PARENT), но дополнительно некоторые неиерархические отношения.neo4j cypher запрос для сопоставления иерархических отношений
Скажем, это семейное дерево с отношениями к стране рождения для каждого человека, для простоты
Таким образом, каждая страна рождения является узлом, и каждый человек является узлом, и я мог бы создать отношения в шифре, как:
start parent=node(123), child=node(456)
create parent-[:PARENT]->child;
и
start person=node(123), country=node(789)
create person-[:BORN_IN]->country;
, что я хотел бы сделать это, например, получить список людей, которые не имеют каких-либо предков из Англии, или Fol ks, у которых есть предок из Японии или тому подобное. Я чувствую, что это должен быть разумный запрос, но я новичок в cypher и не знаю, как его построить.
UPDATE ** После более обширное тестирование случаев, я обнаружил, что запрос не работает совершенно верно в некоторых. Учитывая, что ребенок с одним родителем из Англии и бабушка и дедушка не из Англии, запрос для детей без каких-либо предков из Англии неправильно возвращает ребенка с родителем из Англии. Похоже на то, как я написал запрос, я получаю возврат для дедушки и бабушки, имеющих отношение NULL к англии. Мой запрос выглядит следующим образом:
START n=node(*), ancestor=node(123)
MATCH n-[r:PARENT*]->o-[b?:BORN_IN]->ancestor
WHERE b IS NULL
RETURN DISTINCT n;
Если все предки этого лица родились в стране, о котором идет речь, он отлично работает.
Спасибо, что сработало отлично. Проблема с моим примером запроса оказалась в том, что я толкнул имя rel. – Paul