У меня сейчас проблемы с тем, чтобы ГДЕ НЕ ... В ... работать. Я надеюсь получить список соседних узлов, которые имеют это отношение «пул» с дочерними узлами, не включая ни одного из исходных дочерних узлов. В настоящий момент, если я использую команду ниже, возвращенный список соседей будет содержать дочерние узлы.
MATCH (parent)-[r:Contains]-(children) WHERE parent.display_name='xyz'
WITH parent, r, children, collect(children) as child_list
OPTIONAL MATCH (children)-[:Pool]->(pool)<-[:Pool]-(neighbours)
WHERE NOT neighbours IN child_list
RETURN child_list, collect(DISTINCT neighbours)
Альтернативный способ сделать это - просто исключить соседей, которые также непосредственно связаны с родителем. Однако это также возвращает соседей в виде списка, содержащего дочерние элементы, по-видимому, игнорируя отношение [r]. Хотя если я сделаю ГДЕ НЕ (соседи) - (родитель), это исключит детей, но за счет отношений, которые не являются [r], текущими отношениями, на которые я смотрю.
MATCH (parent)-[r:Contains]-(children) WHERE parent.display_name='xyz'
WITH parent, r, children, collect(children) as child_list
OPTIONAL MATCH (children)-[:Pool]->(pool)<-[:Pool]-(neighbours)
WHERE NOT (neighbours)-[r]-(parent)
RETURN child_list, collect(DISTINCT neighbours)
Я был бы признателен, если бы кто-нибудь мог взглянуть на любой из вариантов и помочь мне понять, что я делаю неправильно.
Спасибо, Ник