微信小程序开发文档 第13页
Collection.add 在集合上新增记录 函数签名如下: function add(options: object): Promise<Result> 参数说明 字段名 类型 必填 默认值 说明 data Object 是 新增记录的定义 返回值说明 Promise 的 resolve 和 reject 的结果定义如下: 结果说明 resolve 新增记录的结果,Result 定义见下方 reject 失败原因 Result 说明 resolve 的结果 Result 是一个如下结构的对象: 字段 类型 说明 _id String | Number 新增的记录的 ID 示例代码 新增一条待办事项: const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { try { return await db.collection('todos').add({ // data 字段表示需新增的 JSON 数据 data: { description: "learn cloud database", due: new Date("2018-09-01"), tags: [ "cloud", "database" ], // 位置(113°E,23°N) location: new db.Geo.Point(113, 23), done: false } }) } catch(e) { console.error(e) } }
Document.get 获取记录数据,或获取根据查询条件筛选后的记录数据 函数签名如下: function get(): Promise<Result> 返回值说明 Promise 的 resolve 和 reject 的结果定义如下: 结果说明 resolve 查询的结果,Result 定义见下方 reject 失败原因 Result 说明 success 回调的结果及 Promise resolve 的结果 Result 是一个如下结构的对象: 字段 类型 说明 data Object 记录的数据,是一个 Object 示例代码 获取我的指定待办事项详细信息 Promise 风格 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { try { return await db.collection('todos').doc('<some-todo-id>').get() } catch(e) { console.error(e) } }
Collection.get / Query.get 获取集合数据,或获取根据查询条件筛选后的集合数据。 如果没有指定 limit,则默认最多取 20 条记录。 如果没有指定 skip,则默认从第 0 条记录开始取,skip 常用于分页,例子可见第二个示例代码。 如果需要取集合中所有的数据,可以参考第三个示例代码 函数签名如下: function get(): Promise<Result> 返回值说明 Promise 的 resolve 和 reject 的结果定义如下: 结果说明 resolve 查询的结果,Result 定义见下方 reject 失败原因 Result 说明 Promise resolve 的结果 Result 是一个如下结构的对象: 字段 类型 说明 data Array 查询的结果数组,数据的每个元素是一个 Object,代表一条记录 示例代码 1 获取我的待办事项清单 Promise 风格 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { return await db.collection('todos').where({ _openid: 'xxx' // 填入当前用户 openid }).get() } 示例代码 2:分页取数据 获取我的第二页的待办事项清单,假设一页 10 条,现在要取第 2 页,则可以指定 skip 10 条记录 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { return await db.collection('todos') .where({ _openid: 'xxx', // 填入当前用户 openid }) .skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回 .limit(10) // 限制返回数量为 10 条 .get() } 示例代码 3:取集合所有数据 获取集合中的所有待办事项清单:因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取: const...
Collection.doc 获取记录的引用 方法签名如下: function doc(id: string | number): Document 方法接受一个 id 参数,指定需引用的记录 ID 示例代码 const myTodo = db.collection('todos').doc('my-todo-id')
db.collection 获取集合的引用 方法签名如下: function collection(name: string): Collection 方法接受一个 name 参数,指定需引用的集合名称 示例代码 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() const todosCollection = db.collection('todos')
cloud.database 获取数据库的引用 方法签名如下: function database(options?: object): Database 方法接受一个可选对象参数 options,其字段定义如下: 字段名 类型 必填 默认值 说明 env string 否 – 环境 ID 示例代码 以下调用获取默认环境的数据库的引用: const db = wx.cloud.database() 假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库: const testDB = wx.cloud.database({ env: 'test' }) 也可以通过 init 传入默认环境的方式使得获取数据库时默认是默认环境数据库: cloud.init({ env: 'test' }) const testDB = wx.cloud.database()
工具类 API 云开发提供了一系列工具类的 API,此处是存储小程序端的 API 参考文档。 API 说明 getWXContext 获取微信上下文 getWXContext 在云函数中获取微信调用上下文,该方法无需传入参数,会返回以下字段: 字段 含义 字段存在条件 最低版本 OPENID 小程序用户 openid 小程序端调用云函数时 APPID 小程序 AppID 小程序端调用云函数时 UNIONID 小程序用户 unionid 小程序端调用云函数,并且满足 unionid 获取条件时 ENV 云函数所在环境的 ID 无 0.6.0 SOURCE 调用来源(云函数本次运行是被什么触发) 无 0.7.0 SOURCE 值跟随调用链条传递,会表示调用链路情况(用英文逗号分隔),比如小程序调用云函数 A,再在云函数 A 内调用云函数 B,则 A 获得的 SOURCE 为 wx_client, B 内获得的 SOURCE 为 wx_client,scf(微信小程序调用,然后云函数调用)。 SOURCE 的枚举类型: SOURCE 值 含义 wx_devtools 微信 IDE 调用 wx_client 微信小程序调用 wx_http 微信 HTTP API 调用 wx_unknown 微信未知来源调用 scf 云函数调用云函数 其他 非微信端触发 如果在云函数本地调试中,ENV 会为 local,SOURCE 会为 wx_client。 注意事项 请不要在 exports.main 外使用 getWXContext,此时尚没有调用上下文,无法获取得到信息。 使用示例 const cloud = require('wx-server-sdk') exports.main = async (event, context) => { const { OPENID, APPID, UNIONID, ENV, } = cloud.getWXContext() return { OPENID, APPID, UNIONID, ENV, } }
init 在调用云开发各 API 前,需先调用初始化方法 init 一次(全局只需一次) init 方法的定义如下: function init(options): void init 方法接受一个可选的 options 参数,方法没有返回值。 options 参数定义了云开发的默认配置,该配置会作为之后调用其他所有云 API 的默认配置,options 提供的可选配置如下: 字段 数据类型 必填 默认值 说明 env string | object 否 default 默认环境配置,传入字符串形式的环境 ID 可以指定所有服务的默认环境,传入对象可以分别指定各个服务的默认环境,见下方详细定义 当 env 传入参数为对象时,可以指定各个服务的默认环境,可选字段如下: 字段 数据类型 必填 默认值 说明 database string 否 default 数据库 API 默认环境配置 storage string 否 default 存储 API 默认环境配置 functions string 否 default 云函数 API 默认环境配置 示例代码: const cloud = require('wx-server-sdk') cloud.init({ env: 'test-x1dzi' }) 需要特别注意的是,在 wx-server-sdk 中不再兼容 success、fail、complete 回调,总是只会返回 Promise。
db.command.set 更新指令。用于设定字段等于指定值。 函数签名: function set(value: any): Command 这种方法相比传入纯 JS 对象的好处是能够指定字段等于一个对象: // 以下方法只会更新 style.color 为 red,而不是将 style 更新为 { color: 'red' },即不影响 style 中的其他字段 db.collection('todos').doc('doc-id').update({ data: { style: { color: 'red' } } }) // 以下方法更新 style 为 { color: 'red', size: 'large' } db.collection('todos').doc('doc-id').update({ data: { style: _.set({ color: 'red', size: 'large' }) } }) db.command.remove 更新指令。用于表示删除某个字段。 函数签名: function remove(): Command 示例代码 删除 style 字段: const _ = db.command db.collection('todos').doc('todo-id').update({ data: { style: _.remove() } }) db.command.inc 更新指令。用于指示字段自增某个值,这是个原子操作,使用这个操作指令而不是先读数据、再加、再写回的好处是: 原子性:多个用户同时写,对数据库来说都是将字段加一,不会有后来者覆写前者的情况 减少一次网络请求:不需先读再写 mul 指令同理。 函数签名: function inc(value: number): Command 示例代码 将一个 todo 的进度自增 10: const _ = db.command db.collection('todos').doc('todo-id').update({ data: { progress: _.inc(10) } }) db.command.mul 更新指令。用于指示字段自乘某个值,这是个原子操作,使用这个操作指令而不是先读数据、再加、再写回的好处是: 原子性:多个用户同时写,对数据库来说都是将字段自乘,不会有后来者覆写前者的情况 减少一次网络请求:不需先读再写 inc 指令同理。 函数签名: function mul(value: number): Command 示例代码 将一个 todo 的进度乘 2: const _ =...
db.command.and 查询指令,用于表示逻辑 “与” 的关系,表示需同时满足多个查询筛选条件 示例代码 如筛选出进度大于 50 小于 100 的 todo: 流式写法: const _ = db.command db.collection('todo').where({ progress: _.gt(50).and(_.lt(100)) }) 前置写法: const _ = db.command db.collection('todo').where({ memory: _.and(_.gt(50), _.lt(100)) }) db.command.or 查询指令,用于表示逻辑 “或” 的关系,表示需同时满足多个查询筛选条件。或指令有两种用法,一是可以进行字段值的 “或” 操作,二是也可以进行跨字段的 “或” 操作。 字段值的 “或” 操作指的是指定一个字段值为多个值之一即可: 字段值的或操作:示例代码 如筛选出进度大于 80 或小于 20 的 todo: 流式写法: const _ = db.command db.collection('todo').where({ progress: _.gt(80).or(_.lt(20)) }) 前置写法: const _ = db.command db.collection('todo').where({ progress: _.or(_.gt(80), _.lt(20)) }) 前置写法也可接收一个数组: const _ = db.command db.collection('todo').where({ progress: _.or([_.gt(80), _.lt(20)]) }) 跨字段的 “或” 操作指条件 “或”,相当于可以传入多个 where 语句,满足其中一个即可,示例: 跨字段的或操作:示例代码 如筛选出进度大于 80 或已标为已完成的 todo: const _ = db.command db.collection('todo').where(_.or([ { progress: _.gt(80) }, { done: true } ]))