github.com/neo4j/neo4j/issues/11542

я есть этот пример данных

С примером запроса

CREATE (a1:A {title: "a1"})
CREATE (a2:A {title: "a2"})
CREATE (a3:A {title: "a3"})

CREATE (b1:B {title: "b1"})
CREATE (b2:B {title: "b2"})

MATCH (a:A {title: "a1"}), (b:B {title: "b1"})
CREATE (a)-[r:LINKS]->(b)

MATCH (a:A), (b:B) return a,b

Чего я пытаюсь достичь:

Найти все узлы типа A, которые не связаны с узлом типа B (ans: a2, a3)Найти все узлы типа B, которые не связаны с узлом типа A (ans: b2)Ожидается, что оба эти требования будут двунаправленными и будут иметь одинаковый шаблон запроса.

Где я достиг

Получить все А, не подключенные к В: получает меня a2 и a3, как ожидалось

MATCH path=(a:A)-[r]-(b:B)
WHERE (a)-[r]-(b)
WITH collect(a) as al
MATCH (c:A)
WHERE not c IN al
RETURN c

Получите все отключенные B, я получаю оба b1 и b2, что неверно, и печать "al" показала, что список пуст

MATCH path=(b:B)-[r]-(a:A)
WHERE (b)-[r]-(a)
WITH collect(b) as al
MATCH (c:B)
WHERE not c IN al
RETURN c

кое как

WHERE (b)-[r]-(a) **!=** WHERE (a)-[r]-(b)

даже если у меня есть направление как двунаправленное (не упомянуто)

Если я изменю это наWHERE (a)-[r]-(b) во втором запросе это работает, но я хочу общий двунаправленный запрос.

Ответы на вопрос(1)

Ваш ответ на вопрос