У меня есть требование, чтобы в моей базе данных некоторые узлы имели не более одного отношения данного типа. Например, узлы с меткой Heart
должны быть подключены через has
максимум к одному узлу с меткой Body
.
Вот некоторые тестовые данные для иллюстрации проблемы:
CREATE (h:Heart {animal: "zebra"})
CREATE (b1:Body {animal: "zebra"})
CREATE (b2:Body {animal: "elephant"})
CREATE (b1)-[:has]->(h)
CREATE (b2)-[:has]->(h)
CREATE (h2:Heart {animal: "mouse"})
CREATE (b4:Body {animal: "mouse"})
CREATE (b5:Body {animal: "leopard"})
CREATE (b4)-[:has]->(h2)
CREATE (b5)-[:has]->(h2)
С помощью следующего запроса я могу найти все узлы с соединениями, которые не соблюдают это правило:
MATCH (n:Heart) WHERE (:Body)-[:has]-(n)-[:has]-(:Body) RETURN n
Я бы хотел написать оператор для удаления «лишних» отношений. Прямо сейчас у меня есть запрос на удаление узлов, составляющих эти "лишние" отношения, но он также удаляет узлы, которые я хотел бы сохранить (по одному от каждого).
MATCH (b1:Body)-[:has]-(n)-[:has]-(b2:Body) DETACH DELETE b1, b2
Это тоже не ' t групповых отношений центральным узлом, поэтому я не могу удалить все узлы, кроме одного, так как это не даст желаемого эффекта.
Кто-нибудь знает, как я могу написать оператор, который удалит все "лишние "отношения, пока не останется только одно отношение has
для каждого узла Heart
? Желательно самый старый.