簡體   English   中英

如何在Gremlin中將邊從一個頂點復制到新頂點

[英]How to copy edges from one vertex to a new vertex in Gremlin

背景:我嘗試將這個問題用作基線,但是因為我使用的是Cosmos,並且場景稍有不同,所以我無法使其工作。

我想知道在CosmosDb Gremlin中是否可以將所有邊(從內到外)從一個頂點復制到新頂點。 原因是我使用用戶名作為分區鍵,例如User-User123,在Cosmos DB中,一旦設置便無法更改。

這個想法是,如果用戶想將用戶名從User123更改為User123db,

  • 將使用User-User123db的新分區鍵創建一個新頂點。
  • User-User123的所有邊緣都指向User-User123db
  • 然后將刪除Vertex User-User123。

使用下面的tinkerpop圖,如何創建一個具有marko2名稱的新頂點,並將所有從marko入內和出入的邊指向新marko2頂點,然后刪除舊的marko。

感謝任何可以幫助您的人=)

這是可與CosmosDB一起使用的可用Gremlin步驟

在此輸入圖像描述

我猜問題是使用addE(<traversal>) ..? 至少在純TinkerPop 3.2環境中,這就是失敗的原因。 由於無法在TP 3.2中動態設置邊緣標簽,因此您必須知道所有可能的邊緣標簽(從用戶頂點進出),並分別處理每個邊緣標簽。

基於鏈接答案的原始遍歷:

g.V(4).as('source').
  addV().
    property(label, select('source').label()).as('clone').
  sideEffect(                                                // copy vertex properties
    select('source').properties().as('p').
    select('clone').
      property(select('p').key(), select('p').value())).
  sideEffect(                                                // copy knows out-edges
    select('source').outE('knows').as('e').
    select('clone').
    addE('knows').as('eclone').
      to(select('e').inV()).
    select('e').properties().as('p').                        // copy knows out-edge properties
    select('eclone').
      property(select('p').key(), select('p').value())).
  sideEffect(                                                // copy knows out-edges
    select('source').outE('knows').as('e').
    select('clone').
    addE('knows').as('eclone').
      to(select('e').inV()).
    select('e').properties().as('p').                        // copy knows out-edge properties
    select('eclone').
      property(select('p').key(), select('p').value())).
  sideEffect(                                                // copy created out-edges
    select('source').outE('created').as('e').
    select('clone').
    addE('created').as('eclone').
      to(select('e').inV()).
    select('e').properties().as('p').                        // copy created out-edge properties
    select('eclone').
      property(select('p').key(), select('p').value())).
  sideEffect(                                                // copy knows in-edges
    select('source').inE('knows').as('e').
    select('clone').
    addE('knows').as('eclone').
      from(select('e').outV()).
    select('e').properties().as('p').                        // copy knows in-edge properties
    select('eclone').
      property(select('p').key(), select('p').value()))

因此,您基本上只sideEffect為每個邊緣標簽(每個方向)添加一個sideEffect步驟。

暫無
暫無

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

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