2017-07-07 88 views
3

假設我的查詢是:CosmosDB圖:如何使用gremlin更新具有多個值的頂點的屬性值?

g.addV('employee').property('id', 'john').property('country', 'USA').property('country', 'India') 

它增加了財產的國家,這兩個值即美國和印度。

[ 
{ 
    "id":"john", 
    "label":"employee", 
    "type":"vertex", 
    "properties":{ 
       "country":[ 
          { 
          "id":"5dc2aaf6-cb11-4d4a-a2ce-e5fe79d28c80", 
          "value":"USA" 
          }, 
          { 
          "id":"fcf4baf6-b4d5-45a3-a4ba-83a859806aef", 
          "value":"India" 
          } 
          ] 
       } 
} 
] 

現在我想改變一個現有的值。例如'印度''中國'

這將是什麼查詢?

回答

3

在一個單一的查詢它只是:

g.V().has('id', 'john'). 
    sideEffect(properties('country').hasValue('India').drop()). 
    property(list, 'country', 'China') 
0

GV()。有( '員工', 'ID', '約翰')。財產( '國家', '中國')

+1

這個查詢將與「中國」,而不是個人的價值「印度」替代屬性「國家」的價值。 結果將會是: [{「id」:「john」,「label」:「employee」,「type」:「vertex」,「properties」:{「country」:[{「id」:「3fe29e5e -34b5-481d-bdeb-672415cc2d6d「,」value「:」中國「}]}}] 'USA'和'India'將被替換。 –

+0

我沒有意識到這一點。我以爲你沒有在原來的查詢中使用'list',它不會創建一個'list',而後一個值'India'會覆蓋之前的值'USA'。但那裏是在參考中。我發現這種行爲是非直觀的 - 在addV()之後以單向方式工作,除此之外不同。 –

1

我們可以先,然後刪除'印度'值添加'中國'。我用下面的查詢在我身邊測試它,它工作正常。

g.V().has('id', 'john').properties('country').hasValue('India').drop() 
g.V().has('id', 'john').property(list, 'country', 'China') 
+0

是的,這絕對是一種選擇。但我正在尋找一個單一的查詢,以便我不必使用兩個不同的查詢來更新屬性。謝謝 :) –

相關問題