2017-10-27 2 views
2

バルクデータを属性とマージする方法はドキュメントからはわかりません。ここの例ではRを使用していますが、ソリューションはCypherになります。属性が変更されたとき、または新しい属性データが追加されたときにノードが重複しないように、固有のフィールドとしてidを指定する必要があります。バルクノードと属性をマージする際の重複

x = data.frame(id = 1:2, name = c('Kate','Charles'), 
       age = c(27,34), grp = c('A','B'), stringsAsFactors = F) 

merge_df_with_graph = function(x, graph, query){ 
    t = newTransaction(graph) 
    for (i in 1:nrow(x)) { 
    appendCypher(t, query, id = x$id[i], name = x$name[i], 
       age = x$age[i], grp = x$grp[i]) 
    } 
    commit(t) 
} 

merge_df_with_graph(x, graph, "MERGE (n:User {id:{id}, name:{name}});") 
n = getNodes(graph, 'MATCH (n) RETURN (n);') 
length(n) 
#> [1] 2 

# when an attribute changes 
x$name[2] = 'Charlie' 
merge_df_with_graph(x, graph, "MERGE (n:User {id:{id}, name:{name}});") 
n = getNodes(graph, 'MATCH (n) RETURN (n);') 
length(n) 
#> [1] 3 

# when new attributes data is added 
merge_df_with_graph(x, graph, "MERGE (n:User {id:{id}, name:{name}, age:{age}});") 
n = getNodes(graph, 'MATCH (n) RETURN (n);') 
length(n) 
#> [1] 5 

私はのNeo4jする新たなんだとexample in documentationは、一意のキー以外の属性を定義する方法を指定しません。援助に感謝します。

答えて

2

idプロパティはMERGEに、使用後はSET以外のプロパティで使用できます。

MERGE (n:User {id:{id}) 
SET n.name = 'Kate' 

# (...) 

MERGE (n:User {id:{id}) 
SET n.name = 'Charlie' 
SET n.age = 22 
+1

私にとっては、SET n.name = {name}と解釈されます。素晴らしい感謝ブルーノ:) – geotheory

関連する問題