• 更新数据项
    • SDK 1.1.0 及以上版本
      • 操作步骤
      • 普通数据更新
      • 计数器原子性更新
      • 数组原子性更新
        • 待插入的数组 加到原数组末尾
        • 待插入的数组 中不包含在原数组的数据加到原数组末尾
        • 从原数组中删除指定的值
      • 批量更新数据项
    • SDK 1.1.0 以下版本

    更新数据项

    {% 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)

    参数说明

    参数 类型 必填 说明
    tableID Number 数据表 ID

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

    2.通过 recordID 设置指定记录

    let MyRecord = MyTableObject.getWithoutData(recordID)

    参数说明

    参数 类型 必填 说明
    recordID String 记录 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)

    参数说明

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

    请求示例

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

    数组原子性更新

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

    product.append(key, value)

    参数说明

    参数 类型 必填 说明
    key String 在数据表中的类型必须是 Array
    value Array 或 Array item -

    请求示例

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

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

    product.uAppend(key, value)

    参数说明

    参数 类型 必填 说明
    key String 在数据表中的类型必须是 Array
    value Array 或 Array item -

    请求示例

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

    从原数组中删除指定的值

    product.remove(key, value)

    参数说明

    参数 类型 必填 说明
    key String 在数据表中的类型必须是 Array
    value Array 或 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 参数说明

    参数 类型 必填 说明
    tableID Number 数据表 ID
    recordID String 数据项 ID
    data Object 待更新的自定义数据

    请求示例

    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. })

    返回参数

    参数 类型 说明
    id String 数据项 ID
    created_at Number 创建时间
    is_admin Boolean 自定义字段
    name String 自定义字段
    price Number 自定义字段
    tags Array 自定义字段

    返回示例

    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 %}