Удалите дублирующую проверку узлов, если определенные ключи имеют одинаковые значения - PullRequest
0 голосов
/ 06 ноября 2019

В моей базе данных есть некоторые узлы, которые имеют эту форму:

n:Contact
{
   "name": "name surname",
   "created_timestampe": 1460411261,
   "updated_timestamp": 1494083876,
   "contact_point": [
        "+39*********"
   ]
 }

, но есть некоторые узлы, где у меня есть некоторые значения для ключей name и contact_point, которые дублируются. Меня не волнует созданная временная отметка или обновленная временная отметка, но я хочу удалить эти дубликаты, проверяя, действительно ли значение contact_point одинаково. Я написал это, но я не уверен, что это правильно:

MATCH (c:Contact)
WITH c.contact_point AS contact_point, COLLECT(c) AS contacts
WHERE SIZE(contacts) > 1
FOREACH (n IN contacts| DETACH DELETE n);

1 Ответ

1 голос
/ 07 ноября 2019

Вы, вероятно, не хотите удалять все дубликатов. Чтобы сохранить только один из них, сделайте это вместо этого (при условии, что вы уверены, что можно удалить все связи дубликатов, которые удаляются):

MATCH (c:Contact)
WITH c.contact_point AS cp, COLLECT(c) AS contacts
FOREACH (n IN contacts[1..] | DETACH DELETE n);

Уведомлениечто тест WHERE SIZE(contacts) > 1 не требуется, поскольку contacts[1..] будет пустым списком, если contacts имеет только один элемент.

Вы можете сделать то же самое с c.name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...