Предположим, что для определенных узлов атрибуты имеют уникальные ограничения, определенные на них.Поддержка Neo4j для отложенных ограничений
При клонировании узлов мы копируем свойства от исходного к клонированному узлу, а затем модифицируем уникальные атрибуты на клонированном узле.
Однако neo4j демонстрирует нетерпеливую оценку ограничения и, похоже, терпит неудачу, как только уникальные свойства реплицируются от исходного к клонированному узлу.
Есть ли способ различать оценку ограничений до конца транзакции?
Или некоторое обходное решение, которое может смягчить проблему на время.
Образец высчитывать для иллюстрации проблемы:
Создать уникальное ограничение для узлов меченых у на идентификатор атрибута.
create constraint on (y:y) assert y.id is unique;
Создать несколько узлов.
create (y:y{id: 1}) return y; create (y:y{id: 2}) return y;
Теперь попробуйте клонировать у узла с наибольшим идентификатором, и назначить новые идентификаторы.
match (y:y) with max(y.id) as maxid match (lasty:y{id: maxid}) unwind range(1, 10) as i create (nexty:y) set nexty = lasty set nexty.id = maxid + i return nexty;
выше высчитывать не удается быстро с ниже ошибки:
Node 5368657 already exists with label y and property "id"=[2]
Джим, ваша рекомендация работает идеально. Добавление метки последним после заполнения свойств узла решает проблему. – Mehul