基本上,如果我有一个图表,其中 Rob 有一个苹果,Anna 也有一个这样的苹果:
Rob --has-->apple Anna --has-->apple
这显然是一个错误。我只想要一个带有 Rob 和 Anna 边缘的“苹果”顶点:Rob --has--> apple <--has--Anna
Gremlin 中是否有一个选项可以“合并”所有带有标签“苹果”的顶点并且仍然有边缘?抱歉这个不好的问题,英语不是我的第一语言,我在这个 TT 上相当新,但希望有人能提供帮助......
基本上,如果我有一个图表,其中 Rob 有一个苹果,Anna 也有一个这样的苹果:
Rob --has-->apple Anna --has-->apple
这显然是一个错误。我只想要一个带有 Rob 和 Anna 边缘的“苹果”顶点:Rob --has--> apple <--has--Anna
Gremlin 中是否有一个选项可以“合并”所有带有标签“苹果”的顶点并且仍然有边缘?抱歉这个不好的问题,英语不是我的第一语言,我在这个 TT 上相当新,但希望有人能提供帮助......
如果苹果的数量可以放入主内存,那么您可以执行以下操作。
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)}
每行执行以下操作:
执行此操作时请注意交易: https ://github.com/tinkerpop/blueprints/wiki/Graph-Transactions
不在 Cypher 中你会做
start Rob=node(1), Anna=node(2) match Rob-[:has]->apple<-[:has]-Anna return apple
我认为 Gremlin 会像
rob=1
anna=2
t = new Table()
g.v(rob).out('has').as('apple').in('has').filter{it.id==anna}.table(t,['apple']){it.name}.iterate()
高温高压
/彼得