Collection.get(): Promise<Object>

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

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

返回值

Promise.<Object>

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

使用说明

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

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

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

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

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

示例代码 1

获取我的待办事项清单:

小程序端

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

云函数端

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

示例代码 2:分页取数据

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

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

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

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

云函数端

  1. const cloud = require('wx-server-sdk')
  2. cloud.init({
  3. env: cloud.DYNAMIC_CURRENT_ENV
  4. })
  5. const db = cloud.database()
  6. const MAX_LIMIT = 100
  7. exports.main = async (event, context) => {
  8. // 先取出集合记录总数
  9. const countResult = await db.collection('todos').count()
  10. const total = countResult.total
  11. // 计算需分几次取
  12. const batchTimes = Math.ceil(total / 100)
  13. // 承载所有读操作的 promise 的数组
  14. const tasks = []
  15. for (let i = 0; i < batchTimes; i++) {
  16. const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
  17. tasks.push(promise)
  18. }
  19. // 等待所有
  20. return (await Promise.all(tasks)).reduce((acc, cur) => {
  21. return {
  22. data: acc.data.concat(cur.data),
  23. errMsg: acc.errMsg,
  24. }
  25. })
  26. }

小程序端兼容 Callback 风格调用

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

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