SDK数据库 Collection请求


本文整理自网络,侵删。

Collection.get(): Promise<Object>

支持端:小程序 , 云函数 , Web

获取集合数据,或获取根据查询条件筛选后的集合数据。

返回值

Promise.<Object>

属性 类型 说明
data Array.<Object> 查询的结果数组,数据的每个元素是一个 Object,代表一条记录

使用说明

统计集合记录数或统计查询语句对应的结果记录数

小程序端与云函数端的表现会有如下差异:

  • 小程序端:如果没有指定 limit,则默认且最多取 20 条记录。
  • 云函数端:如果没有指定 limit,则默认且最多取 100 条记录。

如果没有指定 skip,则默认从第 0 条记录开始取,skip 常用于分页,例子可见第二个示例代码。

如果需要取集合中所有的数据,仅在数据量不大且在云函数中时,可以参考云函数使用示例中的第三个示例代码

示例代码 1

获取我的待办事项清单:

小程序端

const db = wx.cloud.database()
db.collection('todos').where({
  _openid: 'xxx' // 填入当前用户 openid
}).get().then(res => {
  console.log(res.data)
})

云函数端

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
exports.main = async (event, context) => {
  return await db.collection('todos').where({
    _openid: 'xxx' // 填入当前用户 openid
  }).get()
}

示例代码 2:分页取数据

获取我的第二页的待办事项清单,假设一页 10 条,现在要取第 2 页,则可以指定 skip 10 条记录

db.collection('todos')
  .where({
    _openid: 'xxx', // 填入当前用户 openid
  })
  .skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回
  .limit(10) // 限制返回数量为 10 条
  .get()
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.error(err)
  })

示例代码 3:取集合所有数据

获取集合中的所有待办事项清单:因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取。 特别注意*:如非数据量非常小,否则勿将集合所有数据直接返回,一是采集不必要数据会带来性能问题,二是云函数返回小程序数据大小会有大小限制

云函数端

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('todos').count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}

小程序端兼容 Callback 风格调用

如第一个示例中的小程序端调用有等价的 Callback 风格调用:

const db = wx.cloud.database()
db.collection('todos').where({
  _openid: 'xxx' // 填入当前用户 openid
}).get({
  success: function(res) {
    console.log(res.data)
  },
  fail: console.error
})

Collection.update(): Promise<Object>

支持端:小程序 2.9.4, 云函数 , Web

更新多条记录

返回值

Promise.<Object>

属性 类型 说明
stats Object 更新结果的统计,其中包含的字段见下方 stats 的定义

stats 的结构

属性 类型 说明
updated number 成功更新的记录数量

注意事项

API 调用成功不一定代表想要更新的记录已被更新,比如有可能指定的 where 筛选条件只能筛选出 0 条匹配的记录,所以会得到更新 API 调用成功但其实没有记录被更新的情况,这种情况可以通过 stats.updated 看出来

示例代码

更新待办事项,将所有未完待办事项进度加 10:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const _ = db.command
exports.main = async (event, context) => {
  try {
    return await db.collection('todos').where({
      done: false
    })
    .update({
      data: {
        progress: _.inc(10)
      },
    })
  } catch(e) {
    console.error(e)
  }
}

Collection.remove(): Promise<Object>

支持端:小程序 2.9.4, 云函数

删除多条记录。注意只支持通过匹配 where 语句来删除,不支持 skip 和 limit。

返回值

Promise.<Object>

属性 类型 说明
stats Object 更新结果的统计,其中包含的字段见下方 stats 的定义

stats 的结构

属性 类型 说明
removed number 成功删除的记录数量

注意事项

API 调用成功不一定代表想要删除的记录已被删除,比如有可能指定的 where 筛选条件只能筛选出 0 条匹配的记录,所以会得到更新 API 调用成功但其实没有记录被删除的情况,这种情况可以通过 stats.removed 看出来

示例代码

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
exports.main = async (event, context) => {
  try {
    return await db.collection('todos').where({
      done: true
    }).remove()
  } catch(e) {
    console.error(e)
  }
}

Collection.count(): Promise<Object>

支持端:小程序 , 云函数 , Web

统计匹配查询条件的记录的条数

返回值

Promise.<Object>

属性 类型 说明
total number 结果数量

使用说明

统计集合记录数或统计查询语句对应的结果记录数

小程序端与云函数端的表现会有如下差异:

  • 小程序端:注意与集合权限设置有关,一个用户仅能统计其有读权限的记录数
  • 云函数端:因属于管理端,因此可以统计集合的所有记录数

小程序端示例代码

获取我的待办事项总数

Promise 风格

const db = wx.cloud.database()
db.collection('todos').where({
  _openid: 'xxx' // 填入当前用户 openid
}).count().then(res => {
  console.log(res.total)
})

兼容支持回调风格

const db = wx.cloud.database()
db.collection('todos').where({
  _openid: 'xxx' // 填入当前用户 openid
}).count({
  success: function(res) {
    console.log(res.total)
  },
  fail: console.error
})

云函数端示例

获取我的待办事项总数

阅读剩余部分

相关阅读 >>

微信小程序云开发 云开发能力

微信小程序 全局配置

微信小程序 工具库类国密算法

微信小程序画布 canvas

微信小程序 api

微信小程序云开发服务端数据库api 获取记录的引用

微信小程序 订阅消息deletetemplate

sdk数据库 command聚合操作符布尔操作符

微信小程序云开发sdk文档 开发能力

微信小程序 转发

更多相关阅读请进入《微信小程序》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...