簡體   English   中英

如何在Gremlin中合並具有相同屬性的頂點?

[英]How to merge vertices with same properties in Gremlin?

基本上,如果我有一個圖,其中Rob有一個蘋果,Anna也有這樣的蘋果:

羅布-有->蘋果安娜-有->蘋果

這顯然是一個錯誤。 我只想要一個'蘋果'頂點,且具有來自Rob和Anna的邊緣,就像這樣:Rob --has-> apple <-has--Anna

Gremlin中是否有一個選項可以“合並”所有帶有標簽“ apple”的頂點並且仍然具有邊? 抱歉,這個問題很抱歉,英語不是我的母語,並且在TT上我還很陌生,希望有人可以幫助您...

不在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()

高溫超導

/彼得

如果一定數量的蘋果可以放入主存儲器中,則可以執行以下操作。

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)}

每行執行以下操作:

  1. 創建一組內存中的蘋果。
  2. 在要合並的圖中找到所有蘋果(我不知道您的數據模型,所以這是最佳假設)。
  3. 創建一個新的蘋果頂點(合並頂點)。
  4. 對於每個蘋果,設置新蘋果頂點的各自屬性(可能會覆蓋舊的蘋果屬性)
  5. 對於每個傳出邊,從合並蘋果添加類似的邊。
  6. 對於每個傳入邊緣,將一個相似的邊緣添加到合並蘋果。
  7. 刪除所有蘋果(新合並的蘋果除外)。

當您執行此操作時,請注意交易: https//github.com/tinkerpop/blueprints/wiki/Graph-Transactions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM