#neo4j #cypher #singleton
#neo4j #cypher #синглтон
Вопрос:
Я новичок в Neo4J, и у меня есть вопрос к вам, ребята. Я импортирую файл CSV, и он дублирует мои узлы вместо их объединения.
Пример
ФАЙЛ CSV :
Id1,Id2,Relation
Alice,Bob,KNOWS
Morgane,Bob,KNOWS
Bob,James,KNOWS
Я хотел бы получить результат как таковой
Alice---(KNOWS)--->Bob<---(KNOWS)---Morgane
^
|
(KNOWS)
|
James
Хотя то, что происходит, :
Alice---(KNOWS)--->Bob
Morgane---(KNOWS)--->Bob
Bob---(KNOWS)--->James
Я бы хотел, чтобы Bob был синглтоном, но я получаю несколько «Bob» с разными внутренними идентификаторами. Я хотел бы объединить все бобы вместе.
У кого-нибудь есть идея?
(Обратите внимание, что стрелка между Джеймсом и Бобом должна быть наоборот в «желаемом результате», но все в порядке, проблема здесь не в этом)
редактировать: я попытался создать ограничение перед импортом данных, но, похоже, оно не работает : CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
Спасибо за вашу помощь!
Комментарии:
1. каков ваш запрос на импорт?
2. На самом деле я использую python для его загрузки, это было бы что-то вроде: CREATE (a:Person {name:’Alice» str(i) «‘})-[x: ЗНАЕТ {с: 1999}]->(b:Person {name:’Bob’})
Ответ №1:
Вы должны изменить свой запрос, чтобы сначала ОБЪЕДИНИТЬ свои узлы, а затем ОБЪЕДИНИТЬ отношения:
MERGE (a:Person {name:'Alice'})
MERGE (b:Person {name:'Bob'})
MERGE (a)-[x:KNOWS {since:1999}]->(b)
Комментарии:
1. Итак, я решил ее, используя библиотеку APOC и следующий код: MATCH (n: Client) ИСПОЛЬЗУЯ toLower(n.ClientID) в качестве имени, собирайте (n), когда узлы ВЫЗЫВАЮТ apoc.refactor.mergeNodes(узлы), возвращают ВОЗВРАТ узла *
2. @theowl-Yte Этот ответ показывает, как предотвратить проблему. Вам следует изучить документацию по слиянию , чтобы понять, как изменить ваши запросы, чтобы избежать дублирования данных.