在Map <..,struct>中分配结构的值字段会删除未指定的值

时间:2019-02-14 19:28:15

标签: struct vespa

我正在遵循文档: https://docs.vespa.ai/documentation/reference/document-json-update-format.html#assign-map-field

当我在映射中更新结构的单个字段以构造未指定的值时,将被删除。这是错误还是预期行为?我想保留其他值。

在更新之前,对象看起来像这样

...
"status":[  
   {  
      "key":0,
      "value":{  
         "f1":"before",
         "f2":"before2"
      }
   }
]
...

我发出了http PUT请求

{
   "update":"id:ITEM:ITEM::ITEM_1",
   "fields":{
      "status{0}":{
         "assign":{
            "f1: "changed"
         }
      }
   }
}

在PUT之后,f1字段会更改,但f2字段会被删除

"status":[
   {
      "key":0,
      "value":{
         "f1":"changed"
      }
   }
]
field status type map<int, status> {
     indexing: summary
     struct-field key { indexing: attribute }
     struct-field value.f1 { indexing: summary | attribute}
     struct-field value.f2 { indexing: summary | attribute}
}

struct status {
     field f1 type string {}
     field f2 type string {}
}

1 个答案:

答案 0 :(得分:4)

您需要使用Document Field Path Syntax 更新单个地图条目。

{
   "update":"id:ITEM:ITEM::ITEM_1",
   "fields":{
      "status{0}.f1": { "assign": "changed" }
   }
}