2017-07-07 20 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

是的,这绝对是一种选择。但我正在寻找一个单一的查询,以便我不必使用两个不同的查询来更新属性。谢谢 :) –

相关问题