Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Neo4j 如何在Gremlin中合并具有相同属性的顶点?_Neo4j_Graph Databases - Fatal编程技术网

Neo4j 如何在Gremlin中合并具有相同属性的顶点?

Neo4j 如何在Gremlin中合并具有相同属性的顶点?,neo4j,graph-databases,Neo4j,Graph Databases,基本上,如果我有一个图,其中Rob有一个苹果,Anna也有一个苹果,像这样: 罗布有苹果吗 安娜有苹果吗 这显然是个错误。我只想要一个“苹果”顶点,其边缘来自Rob和Anna,如下所示: Rob-->有-->苹果没有你想要的密码 start Rob=node(1), Anna=node(2) match Rob-[:has]->apple<-[:has]-Anna return apple 嗯 /peter如果苹果的数量可以放入主内存,那么您可以执行以下操作 apples = []

基本上,如果我有一个图,其中Rob有一个苹果,Anna也有一个苹果,像这样:

罗布有苹果吗 安娜有苹果吗

这显然是个错误。我只想要一个“苹果”顶点,其边缘来自Rob和Anna,如下所示:
Rob-->有-->苹果没有你想要的密码

start Rob=node(1), Anna=node(2) match Rob-[:has]->apple<-[:has]-Anna return apple


/peter

如果苹果的数量可以放入主内存,那么您可以执行以下操作

apples = [] as Set
g.id(T.v)[[type:'apple']].each{apples.add(it)}
apple = g.addVertex()
apples.each{it.map.each{k,v -> apple[k] = v}
apples.each{it.outE.each{g.addEdge(apple, it.inVertex, it.label)}
apples.each{it.inE.each{g.addEdge(apple, it.outVertex, it.label)}
apples.each{g.removeVertex(it)}
每行执行以下操作:

  • 创建一组内存中的苹果
  • 在图中找到你想要合并的所有苹果(我不知道你的数据模型,所以这是最好的假设)
  • 创建一个新的苹果顶点(合并顶点)
  • 对于每个苹果,设置新苹果顶点的相应属性(可能会覆盖旧苹果属性)
  • 对于每个传出边,从合并苹果添加一个类似的边
  • 对于每个传入边,向合并苹果添加一个类似的边
  • 移除所有苹果(新的合并苹果除外)
  • 在执行此操作时,请对交易保持明智:

    apples = [] as Set
    g.id(T.v)[[type:'apple']].each{apples.add(it)}
    apple = g.addVertex()
    apples.each{it.map.each{k,v -> apple[k] = v}
    apples.each{it.outE.each{g.addEdge(apple, it.inVertex, it.label)}
    apples.each{it.inE.each{g.addEdge(apple, it.outVertex, it.label)}
    apples.each{g.removeVertex(it)}