更新单条数据

接口

PUT /hserve/v2.2/table/:table_name/record/:record_id/

其中 :table_name 需替换为你的数据表名称,record_id 需替换为你的记录 ID

参数说明

参数类型必填说明
$unsetobjectN删除字段
$setobjectY更新字段
  • 对同一字段进行多次 set 操作,后面的数据会覆盖掉前面的数据
  • 不可同时用 set 与 unset 操作同一字段,否则会报 605 错误
  • 数据要与预先在知晓云平台设定的数据类型一致
  • 如果没有指定为 $unset 更新,则默认为 $set 更新
  • 若更新数据中包含 created_by, created_at, updated_at 这几个字段,则最终更新完成的数据中这几个字段将以更新数据中设置的字段值为准。

请求示例

更新表 test_table 中 id 为 5cbe89e7f1ec740af442a1fa 的记录,将记录的 nickname 更新为 cool, 删除记录的 gender 字段

  1. curl -X PUT \
  2. -H "X-Hydrogen-Client-ID: [[client_id]]" \
  3. -H "Authorization: Hydrogen-r1 {{AccessToken}}" \
  4. -H "Content-Type: application/json" \
  5. -d '{"$set": {"nickname": "cool"}, "$unset": {"gender": ""}}' \
  6. https://{{服务器域名}}/hserve/v2.2/table/test_table/record/5cbe89e7f1ec740af442a1fa/

返回参数说明

参数类型说明
idstringid, 唯一标识
created_atinteger创建时间
updated_atinteger更新时间
created_byinteger创建者 id
read_permarray读权限
write_permarray写权限

返回示例

  1. {
  2. "_id": "5cbe89e7f1ec740af442a1fa",
  3. "_prefetched_objects_cache": {},
  4. "created_at": 1555990980,
  5. "created_by": 37967230792046,
  6. "id": "5cbe89e7f1ec740af442a1fa",
  7. "read_perm": [
  8. "user:*"
  9. ],
  10. "nickname": "cool",
  11. "updated_at": 1556006931,
  12. "write_perm": [
  13. "user:37967230792046"
  14. ]
  15. }

状态码说明

  • 200 更新成功

更新 pointer 类型数据

接口

PUT /hserve/v2.2/table/:table_name/record/:record_id/

其中 :table_name 需替换为你的数据表名称,record_id 需替换为你的记录 ID

请求示例

假设有 product 表, product 表部分字段如下:

字段名字段类型说明
userpointer指向了 _userprofile 表

现在需要更新 product 表中 id 为 1bdfaf068asd123123asd 的数据行, 将它的 user 字段指向 _userprofile 表中 id 为 5cbecc548b155c0b6d1da762 的记录

  1. curl -X PUT \
  2. -H "X-Hydrogen-Client-ID: [[client_id]]" \
  3. -H "Authorization: Hydrogen-r1 {{AccessToken}}" \
  4. -H "Content-Type: application/json" \
  5. -d '{"user":"5cbecc548b155c0b6d1da762"}' \
  6. https://{{服务器域名}}/hserve/v2.2/table/product/record/1bdfaf068asd123123asd/

返回参数说明

参数说明
idid, 唯一标识
created_at创建时间
updated_at更新时间
created_by创建者 id
read_perm读权限
write_perm写权限

返回示例

  1. {
  2. "_id": "1bdfaf068asd123123asd",
  3. "_prefetched_objects_cache": {},
  4. "created_at": 1555990980,
  5. "created_by": 37967230792046,
  6. "id": "1bdfaf068asd123123asd",
  7. "read_perm": [
  8. "user:*"
  9. ],
  10. "user": {
  11. "_table": "_userprofile",
  12. "id": "5cbecc548b155c0b6d1da762"
  13. },
  14. "updated_at": 1556008061,
  15. "write_perm": [
  16. "user:37967230792046"
  17. ]
  18. }

状态码说明

  • 200 更新成功

数据原子性更新

当请求同时对一个数据进行修改时,原子性更新使得冲突和覆盖导致的数据不正确的情况不会出现,目前支持的数据类型是数字类型数组类型

接口

PUT /hserve/v2.2/table/:table_name/record/:record_id/

其中 :table_name 需替换为你的数据表名称,record_id 需替换为你的记录 ID

参数说明

参数类型必填说明
keykey 字段对应的数据类型Ykey 应为数据表中定义的字段名

本接口支持以下原子性操作:

(1) incr_by 对数字类型的字段的值进行增减操作

将对象中的价格(price)字段加 1

  1. {
  2. "price": {
  3. "$incr_by": 1
  4. }
  5. }

将对象中的价格(price)字段减 1

  1. {
  2. "price": {
  3. "$incr_by": -1
  4. }
  5. }

(2) append 对数组类型的字段的值追加一个数组

往对象中的 tag 字段追加 「Hello」

  1. {
  2. "tag": {
  3. "$append": ["Hello"]
  4. }
  5. }

(3) append_unique 对数组类型的字段的值追加一个数组,但追加的数组里的数组项,如果已存在于原数组中,则该数组项不会再被追加

往对象中的 tag 字段追加 「Hello」,tag 字段依然为 ["Hello"]

  1. {
  2. "tag": {
  3. "$append_unique": ["Hello"]
  4. }
  5. }

(4) remove 从数组类型的字段的值里,删除包含在指定数组中的数组项

往对象中的 tag 字段删除 「Hello」

  1. {
  2. "tag": {
  3. "$remove": ["Hello"]
  4. }
  5. }

请求示例

  1. curl -X PUT \
  2. -H "X-Hydrogen-Client-ID: [[client_id]]" \
  3. -H "Authorization: Hydrogen-r1 {{AccessToken}}" \
  4. -H "Content-Type: application/json" \
  5. -d '{"desc": {"$append": ["atomic data"]}, "price": {"$incr_by": -1}}' \
  6. https://{{服务器域名}}/hserve/v2.2/table/test_table/record/5cbe89e7f1ec740af442a1fa/

返回参数说明

参数说明
idid, 唯一标识
created_at创建时间

返回示例

  1. {
  2. "created_at": 1487053095,
  3. "id": "7",
  4. "name": "fushi",
  5. "price": 11,
  6. "desc": ["sweet", "red"],
  7. "amount": 2
  8. }

按条件批量更新数据

数据更新依赖当前登录用户拥有的该数据的写权限。

接口

PUT /hserve/v2.2/table/:table_name/record/

其中 :table_name 需替换为你的数据表名称,record_id 需替换为你的记录 ID

  • 当更新的数据大于 1000 条时,不支持使用触发器,且删除操作是异步执行
  • 如需更新 1000 条以上数据,可指定 enable_trigger 为 0 不触发触发器。
  • 该接口支持通过参数 return_total_count 指定是否返回待更新对象总数,以协助不关心对象总数只关心数据更新结果的开发者提升接口响应速度。同时,从 v2.2 版本开始该接口默认不返回待更新对象总数,欲获取总数的开发者需要显式指定 return_total_count 参数。

参数说明

Query Parameters:

参数类型必填说明
whereobjectY筛选的条件
limitintegerN最多更新数
offsetintegerN从第几条开始更新
enable_triggerintegerN是否使用触发器,1 为使用触发器,0 为不使用
return_total_countintegerN返回结果中是否包含 total_count,1 为包含,0 为不包含,默认不包含

请求示例

更新 nickname 为 hgz 的记录, 将 age 加 1

  1. curl -X PUT \
  2. -H "X-Hydrogen-Client-ID: [[client_id]]" \
  3. -H "Authorization: Hydrogen-r1 {{AccessToken}}" \
  4. -H "Content-Type: application/json" \
  5. -d '{"age": {"$incr_by": 1}}' \
  6. "https://{{服务器域名}}/hserve/v2.2/table/test_table/record/?where=%7b%22nickname%22%3a%7b%22%24eq%22%3a%22hgz%22%7d%7d"

其中 %7b%22nickname%22%3a%7b%22%24eq%22%3a%22hgz%22%7d%7d{"nickname":{"$eq":"hgz"}} 经过 urlencode 后的结果

info

where 一定要作为 URL 的 Query Parameters 传入

返回参数说明

参数说明
succeed成功更新记录数
total_countwhere 匹配的记录数,包括无权限操作记录,仅当 return_total_count 为 1 时返回
offset与传入参数 offset 一致
limit与传入参数 limit 一致
next下一次的更新链接,若待更新记录数超过上限,可通过该链接继续更新

返回示例

  1. {
  2. "succeed": 8,
  3. "total_count": 10,
  4. "offset": 0,
  5. "limit": 10,
  6. "next": null
  7. }