#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