Пропустить существующий узел при загрузке csv

#neo4j

#neo4j

Вопрос:

я новичок в neo4j и хотел бы загрузить CSV-файл и создать набор узлов. Однако у меня уже есть несколько существующих узлов, которые могут существовать в этом файле csv. Есть ли возможность загрузить csv, создать узлы на основе каждой строки и в случае, если узел уже существует, пропустить эту строку? Спасибо

Ответ №1:

Вы можете использовать предложение MERGE, чтобы избежать создания повторяющихся узлов и связей.

Однако вам необходимо внимательно прочитать документацию, чтобы понять, как использовать MERGE , поскольку неправильное использование может привести к непреднамеренному созданию узлов и связей.

Ответ №2:

Слияние даст вам то, что вы хотите, однако вы должны быть осторожны, как вы однозначно идентифицируете запись, чтобы предотвратить создание дубликатов

Я сначала добавлю желаемую окончательную форму, поскольку, похоже, объем внимания снижается…

 // This one is safe assuming name is a true unique identifier of your Friends
// and that their favorite colors and foods may change over time
LOAD CSV FROM 'data/friends.csv' AS line
MERGE (f:Friend { name: line[0]})
set a.favorite_food = line[1]
set a.favorite_color = line[2]
  

Приведенное выше слияние создаст или найдет дружественный узел с соответствующим именем, а затем, независимо от того, создаем мы его или обновляем, установим для него атрибуты.

Если бы мы вместо этого предоставили все атрибуты в слиянии как таковые:

 // This one is dangerous - all attributes must match in order
//                         to find the existing Friend node
LOAD CSV FROM 'data/friends.csv' AS line
MERGE (f:Friend { name: line[0], favorite_food: line[1], favorite_color: line[2]})
  

Тогда мы не смогли бы найти существующего друга каждый раз, когда их favorite_food или favorite_color обновлялись в наших загружаемых (повторно) данных.

Вот пример для тех, у кого воображение не полностью заполнило пробелы…

 //Last month's file contained:
Bob Marley,Hemp Seeds,Green

//This month's file contained:
Bob Marley,Soylent Green,Rainbow