
# 更新单个kv
#### 功能介绍
指定表，指定主键，指定更新文档的部分内容，如果是自描述文档，指定字段名；如果是二进制文档，指定偏移位置和长度；允许指定条件执行。
#### URI
POST /v1/update-kv
表1Query参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                   |
|:---|:---|:---|:---|
| store_name | 否    | String | 仓名，全域唯一，不同租户的仓名不能相同。 - 格式：${prefix}-${region-code}-${account-id}，其中prefix为自定义前缀，region-code为kvs集群所在的区域代码，account-id为用户的账户id - 取值字符限制：\[a-z0-9-\]+ - 长度：\[16,52\] 说明： "-"不能出现在名字头部或尾部 |
#### 请求参数
表2请求Body参数 
| 参数                   | 是否必选 | 参数类型                                                                   | 描述                                              |
|:---|:---|:---|:---|
| table_name           | 是    | String                                                                 | 表名，仓内唯一。 - 长度：\[3, 52\] - 取值字符限制：\[a-z0-9_-\]+  |
| primary_key          | 是    | Document                                                               | 用户自定义的主键名及值。 说明： 内容字段：主键字段名和值，组合索引多个元素。         |
| condition_expression | 否    | [condition_expression] object | 条件表达式，参见conditional小节，禁止携带主键字段。 - 长度：\[8,4096\] |
| update_fields        | 否    | [update_fields] object               | 对kv_doc有效。                                      |
   
 表3condition_expression 
| 参数                      | 是否必选 | 参数类型                                                                         | 描述                   |
|:---|:---|:---|:---|
| single_field_expression | 否    | [single_field_expression] object | 单字段条件。               |
| multi_field_expression  | 否    | [multi_field_expression] object   | 多字段条件，多个相同优先级的单字段条件。 |
| composed_expression     | 否    | [composed_expression] object         | 组合条件, 逐层同级的子表达式嵌套。   |
   
 表4composed_expression 
| 参数          | 是否必选 | 参数类型                                                         | 描述                             |
|:---|:---|:---|:---|
| logic       | 否    | String                                                       | 逻辑关系，取值如"$and", "$or", "$nor"。 |
| expressions | 是    | Array of [expression] objects | 多个相同优先级且相同逻辑的单字段或多字段条件。        |
   
 表5expression 
| 参数                      | 是否必选 | 参数类型                                                                         | 描述                   |
|:---|:---|:---|:---|
| single_field_expression | 否    | [single_field_expression] object | 单字段条件。               |
| multi_field_expression  | 否    | [multi_field_expression] object   | 多字段条件，多个相同优先级的单字段条件。 |
| composed_expression     | 否    | [composed_expression] object         | 组合条件, 逐层同级的子表达式嵌套。   |
   
 表6single_field_expression 
| 参数          | 是否必选 | 参数类型             | 描述                                                                                                                                        |
|:---|:---|:---|:---|
| field       | 是    | String           | 条件字段。                                                                                                                                     |
| func        | 是    | String           | 条件函数，取值如"$gt", $lt","$gte", $lte" "$eq", "$ne", "$prefix", "$exists"。                                                                     |
| value       | 否    | Document         | value和value_array二选一。 - value条件值，适用于除"$in", "$nin"外的func。 - 字段名无意义，可以传空，也可以传字段名。 - $exists值为true/false。 说明： $prefix操作只适用于string和binary类型。 |
| value_array | 否    | Array of strings | "value"和"value_array"二选一。 - "value_array" 条件值列表, 值用于"$in", "$nin"。                                                                        |
   
 表7multi_field_expression 
| 参数          | 是否必选 | 参数类型                                                                                   | 描述                   |
|:---|:---|:---|:---|
| logic       | 否    | String                                                                                 | 多字段条件，多个相同优先级的单字段条件。 |
| expressions | 是    | Array of [single_field_expression] objects | 多个相同逻辑操作的单字段条件。      |
   
 表8update_fields 
| 参数     | 是否必选 | 参数类型             | 描述                                    |
|:---|:---|:---|:---|
| set    | 否    | Document         | 新增字段或覆盖1个或多个字段的值。 说明： 禁止修改sortkey的字段。 |
| add    | 否    | Document         | 对1个或多个字段做加法运算，并更新为运算后的值。              |
| rmv    | 否    | Array of strings | 删除1个或多个字段。 - 数组元素为待删除字段名。             |
| insert | 否    | Document         | 插入元素到数组中 说明： 非数组返回失败。                 |
| delete | 否    | Document         | 从数组中删除某个元素 说明： 值不存在则返回失败。             |
   
#### 响应参数
**状态码：200**
表示更新单个kv请求成功
**状态码：400**
表9响应Body参数 
| 参数         | 参数类型   | 描述         |
|:---|:---|:---|
| error_code | String | 请求返回的错误码。  |
| error_msg  | String | 请求返回的错误信息。 |
   
#### 请求示例
更新单个kv，设置表名为test-table-1，仓名为test-store，设置更新的kv分区键值为user1，排序键为test-file-1，将updateKey字段的值更新为updateValue。
```
POST https://test-store.{endpoint}/v1/update-kv
{
  "table_name" : "test-table-1",
  "primary_key" : {
    "owner" : "user-1",
    "filename" : "test-file-1"
  },
  "update_fields" : {
    "set" : {
      "updateKey" : "updateValue"
    }
  }
}
```
#### 响应示例
无
#### 状态码
| 状态码 | 描述           |
|:---|:---|
| 200 | 表示更新单个kv请求成功 |
| 400 | BadRequest   |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-kvs/ErrorCode.html)。
