数据表 - 更新数据项

优质
小牛编辑
132浏览
2023-12-01

{% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %}

{% content “first” %}

SDK 1.1.0 及以上版本

操作步骤

1.通过 tableID 实例化一个 TableObject 对象,操作该对象即相当于操作对应的数据表

let MyTableObject = new wx.BaaS.TableObject(tableID)

参数说明

参数类型必填说明
tableIDNumber数据表 ID

info
SDK 1.2.0 版本已支持通过数据表名实例化 TableObject,如操作数据表名为 ‘product’ 的数据表,可进行如下实例化:new wx.BaaS.TableObject(‘product’)

2.通过 recordID 设置指定记录

let MyRecord = MyTableObject.getWithoutData(recordID)

参数说明

参数类型必填说明
recordIDString记录 ID

3.修改指定记录的数据

MyRecord.set(data)

该方法支持两种类型的赋值操作:

a.一次性赋值:

  1. MyRecord.set({
  2. key1: value1,
  3. key2: value2
  4. })

b.逐个赋值

  1. MyRecord.set(key1, value1)
  2. MyRecord.set(key2, value2)

info
对同一字段进行多次 set 操作,后面的数据会覆盖掉前面的数据

4.将修改后的记录保存到服务器

MyRecord.update()

通过上面的四个步骤,即完成了一条记录的插入,具体操作阅读以下内容。

普通数据更新

请求示例

  1. // 更新 tableID 为 10 的数据表中 recordID 为 59897882ff650c0477f00485 的数据项的 price 字段
  2. let tableID = 10
  3. let recordID = '59897882ff650c0477f00485'
  4. let Product = new wx.BaaS.TableObject(tableID)
  5. let product = Product.getWithoutData(recordID)
  6. product.set('price', 11)
  7. product.update().then(res => {
  8. // success
  9. }, err => {
  10. // err
  11. })

返回示例

res.data

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

计数器原子性更新

对数字类型的字段进行原子性增减操作。当请求同时对一个数据进行增减时,原子性使得冲突和覆盖导致的数据不正确的情况不会出现。

product.incrementBy(key, value)

参数说明

参数类型必填说明
keyString在数据表中的类型必须是 Number 或 Integer
valueNumber 或 Integer与 key 的类型保持一致

请求示例

  1. product.incrementBy('amount', 1)
  2. product.update().then(res => {}, err => {})

数组原子性更新

待插入的数组 加到原数组末尾

product.append(key, value)

参数说明

参数类型必填说明
keyString在数据表中的类型必须是 Array
valueArray 或 Array item-

请求示例

  1. product.append('desc', ['big'])
  2. // or
  3. product.append('desc, 'big')

待插入的数组 中不包含在原数组的数据加到原数组末尾

product.uAppend(key, value)

参数说明

参数类型必填说明
keyString在数据表中的类型必须是 Array
valueArray 或 Array item-

请求示例

  1. product.uAppend('desc', ['sweet'])
  2. // or
  3. product.uAppend('desc, 'sweet')

从原数组中删除指定的值

product.remove(key, value)

参数说明

参数类型必填说明
keyString在数据表中的类型必须是 Array
valueArray 或 Array item-

请求示例

  1. product.remove('desc', ['sweet'])
  2. // or
  3. product.remove('desc', 'sweet')

info
同一字段设置多次 appendremove 操作后进行 update 操作,则只有最后一次进行的 appendremove 是有效的;如果同时对同一字段进行 setremoveappend 操作,则只有最后执行的操作是有效的。

注: 设置的数据要与预先在知晓云平台设定的数据类型一致,当仅更新一个字段,并且数据不合法时,将无法成功保存,请求返回 Failed to save record, type conflict on fields 错误,如果更新多个字段,其中有一个或一个以上字段数据合法,则请求成功,但其中数据不合法的字段将不会成功保存,如下示例:

  1. /*
  2. * 同时设置 amount 和 date 字段,其中 date 为日期类型,这里为其赋了一个字符串类型的值,
  3. * 该请求会返回 200,但只有 amount 被成功设置为 10
  4. */
  5. let order = Order.getWithoutData(orderID)
  6. order.set('amount', 10)
  7. order.set('date', 'abc')
  8. order.update()

批量更新数据项

SDK 1.4.0 及以上版本支持批量更新数据项。可以通过设置查询条件,将符合条件的数据进行批量更新操作。

其中:

  • Query 对象的使用请查看 查询数据项 章节

  • limitoffset 的使用请查看 分页和排序 章节

请求示例

  1. let MyTableObject = new wx.BaaS.TableObject(tableID)
  2. let query = new wx.BaaS.Query()
  3. // 设置查询条件(比较、字符串包含、组合等)
  4. ...
  5. let records = MyTableObject.limit(10).offset(0).getWithoutData(query)
  6. // 与更新特定记录一致
  7. records.set(key1, value1)
  8. records.incrementBy(key2, value2)
  9. records.append(key3, value3)
  10. records.update().then(res => {}, err => {})

返回示例

res.data:

  1. {
  2. "succeed": 8, // 成功更新记录数
  3. "total_count": 10, // where 匹配的记录数,包括无权限操作记录
  4. "offset": 0,
  5. "limit": 1000,
  6. "next": null // 下一次更新 url,若为 null 则表示全部更新完毕
  7. }

状态码说明

200 更新成功,400 请求数据非法

注: 由于对数据表的增删改均会触发 trigger 动作,为了防止出现严重消耗系统资源的情况,对数据表进行批量操作的数据条目最多不能超过 1000 条。

{% content “second” %}

SDK 1.1.0 以下版本

info
该写法在 sdk v2.0 前仍然有效

wx.BaaS.updateRecord(OBJECT)

OBJECT 参数说明

参数类型必填说明
tableIDNumber数据表 ID
recordIDString数据项 ID
dataObject待更新的自定义数据

请求示例

  1. // 更新 tableID 为 10 的数据表中 recordID 为 59897882ff650c0477f00485 的数据项的 name 字段
  2. let tableID = 10
  3. let recordID = '59897882ff650c0477f00485'
  4. let data = {
  5. name: "VwlPCaUJzxAyNUSNMgzikTQySFoaTZtm"
  6. }
  7. let objects = {
  8. tableID,
  9. recordID,
  10. data
  11. }
  12. wx.BaaS.updateRecord(objects).then(res => {
  13. // success
  14. }, err => {
  15. // err
  16. })

返回参数

参数类型说明
idString数据项 ID
created_atNumber创建时间
is_adminBoolean自定义字段
nameString自定义字段
priceNumber自定义字段
tagsArray自定义字段

返回示例

res.data:

  1. {
  2. "created_at": 1487055951,
  3. "id": "59897882ff650c0477f00485",
  4. "is_admin": false,
  5. "name": "VwlPCaUJzxAyNUSNMgzikTQySFoaTZtm",
  6. "price": 10,
  7. "tags": ["UZbJ", "eSYo"]
  8. }

info
本方法支持部分更新和全量更新

{% endtabs %}