Collection.get / Query.get

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

如果没有指定 limit,则默认最多取 20 条记录。

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

如果需要取集合中所有的数据,可以参考第三个示例代码

函数签名如下:

  1. function get(): Promise<Result>

返回值说明

Promiseresolvereject 的结果定义如下:

结果说明
resolve 查询的结果,Result 定义见下方
reject 失败原因

Result 说明

Promise resolve 的结果 Result 是一个如下结构的对象:

字段 类型 说明
data Array 查询的结果数组,数据的每个元素是一个 Object,代表一条记录

示例代码 1

获取我的待办事项清单

Promise 风格

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

示例代码 2:分页取数据

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

  1. const cloud = require('wx-server-sdk')
  2. cloud.init()
  3. const db = cloud.database()
  4. exports.main = async (event, context) => {
  5. return await db.collection('todos')
  6. .where({
  7. _openid: 'xxx', // 填入当前用户 openid
  8. })
  9. .skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回
  10. .limit(10) // 限制返回数量为 10 条
  11. .get()
  12. }

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

获取集合中的所有待办事项清单:因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:

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

原文: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/collection.get.html