Neo4j-как создать узлы из двух столбцов CSV-файла с одним MERGE? - PullRequest
0 голосов
/ 30 июня 2018

Я использую следующий код для создания графика

LOAD CSV WITH HEADERS 
FROM "file:///fileName.csv"  
AS network
MERGE (n:sourceNode {id:network.node1})
MERGE (m:destNode {id:network.node2})
WITH n,m,network
CALL apoc.create.relationship(n, network.connection, {}, m) yield rel
RETURN n, 
rel, 
m  

Они CSV-файл содержит повторяющиеся значения, такие как

node1,connection,node2
A,0.75,B  
c,0.5,A

этот код создает такой график graph1
Но мне нужен график, подобный следующему для выполнения анализа graph2
Одно из решений, которое я придумал, заключается в том, что я могу создать как node1 и node2 с одним предложением MERGE, поскольку это создаст неповторяющийся узел. Я пытался изменить этот код как

MERGE (n:sourceNode {id:network.node1}, m:destNode {id:network.node2})  

и другие, но я получаю синтаксическую ошибку. Кто-нибудь может порадовать меня этой ситуацией? или есть другое решение этой проблемы?

1 Ответ

0 голосов
/ 02 июля 2018

У вас есть два узла A, потому что в вашем MERGE вы не используете одну и ту же метку. Итак, в конце у вас есть:

  • один узел A с меткой sourceNode
  • один узел A с меткой destNode

Если вы хотите иметь только один узел A, используйте общую метку на исходном и целевом узле, что-то вроде этого:

LOAD CSV WITH HEADERS 
FROM "file:///fileName.csv"  
AS network
MERGE (n:Node {id:network.node1})
MERGE (m:Node {id:network.node2})
WITH n,m,network
CALL apoc.create.relationship(n, network.connection, {}, m) yield rel
RETURN n, 
rel, 
m  

Кроме того, в этом примере вы должны создать уникальное ограничение для метки Node для свойства id: CREATE UNIQUE CONSTRAINT ON (n:Node) ASSERT n.id IS UNIQUE;

...