Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将批量节点与属性合并时发生重复_R_Neo4j_Cypher_R Neo4j - Fatal编程技术网

R 将批量节点与属性合并时发生重复

R 将批量节点与属性合并时发生重复,r,neo4j,cypher,r-neo4j,R,Neo4j,Cypher,R Neo4j,我无法从文档中看到如何将批量数据与属性合并。这里的示例使用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, qu

我无法从文档中看到如何将批量数据与属性合并。这里的示例使用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的新手,除了unique键之外,没有指定如何定义属性。感谢您的帮助。

您只能使用
id
属性来
合并
,并在使用后在其他属性中设置

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

# (...)

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

对我来说,这可以翻译为
SET n.name={name}
。非常感谢布鲁诺:)