微信小程序开发文档 第9页

SDK数据库 Collection·聚合操作

Collection.aggregate(): Aggregate 支持端:小程序 2.7.4, 云函数 0.8.1, Web 发起聚合操作,定义完聚合流水线阶段之后需调用 end 方法标志结束定义并实际发起聚合操作 返回值 Aggregate 示例代码 const $ = db.command.aggregate db.collection('books').aggregate() .group({ // 按 category 字段分组 _id: '$category', // 让输出的每组记录有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值 avgSales: $.avg('$sales') }) .end() .then(res => console.log(res)) .catch(err => console.error(err)) 小程序端兼容支持 callback 风格 const $ = db.command.aggregate db.collection('books').aggregate() .group({ // 按 category 字段分组 _id: '$category', // 让输出的每组记录有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值 avgSales: $.avg('$sales') }) .end({ success: function(res) { console.log(res) }, fail: function(err) { console.error(err) } })

SDK数据库 Collection·获取引用

Collection.doc(id: string): Document 支持端:小程序 , 云函数 , Web 获取集合中指定记录的引用。方法接受一个 id 参数,指定需引用的记录的 _id。 参数 id: string 记录 _id 返回值 Document 示例代码 const myTodo = db.collection('todos').doc('my-todo-id')

SDK数据库 database·开始事务

Database.startTransaction():Promise<Transaction> 支持端:云函数 开始事务,另一个同样可以使用的发起事务的 API 是 runTransaction。仅可在云函数中使用。 返回值 Promise.<Transaction> resolve 的结果为事务操作对象,其上可通过 collection API 操作数据库,通过 commit 或 rollback 来结束或终止事务。 限制 事务现仅支持在云函数 wx-server-sdk 使用。事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务中对多个记录进行操作。 示例代码 两个账户之间进行转账的简易示例 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database({ throwOnNotFound: false, }) const _ = db.command exports.main = async (event) => { try { const transaction = await db.startTransaction() const aaaRes = await transaction.collection('account').doc('aaa').get() const bbbRes = await transaction.collection('account').doc('bbb').get() if (aaaRes.data && bbbRes.data) { const updateAAARes = await transaction.collection('account').doc('aaa').update({ data: { amount: _.inc(-10) } }) const updateBBBRes = await transaction.collection('account').doc('bbb').update({ data: { amount: _.inc(10) } }) await transaction.commit() console.log(`transaction succeeded`) return { success: true, aaaAccount: aaaRes.data.amount - 10, } } else { await transaction.rollback() return { success: false, error: `rollback`, rollbackCode: -100, } } } catch (e) { console.error(`transaction error`, e)...

SDK数据库 database·发起事务

Database.runTransaction(callback: function, times: number): Promise<any> 支持端:云函数 发起事务。仅可在云函数中使用。 参数 callback: function 事务执行函数,需为 async 异步函数或返回 Promise 的函数 times: number 事务执行最多次数,默认 3 次,成功后不重复执行,只有事务冲突时会重试,其他异常时不会重试 返回值 Promise.<any> resolve 的结果为 callback 事务执行函数的返回值,reject 的结果为事务执行过程中抛出的异常或者是 transaction.rollback 传入的值 事务执行函数说明 事务执行函数由开发者传入,函数接收一个参数 transaction(类型定义见 Transaction),其上提供 collection 方法和 rollback 方法。collection 方法用于取数据库集合记录引用进行操作,rollback 方法用于在不想继续执行事务时终止并回滚事务。 事务执行函数必须为 async 异步函数或返回 Promise 的函数,当事务执行函数返回时,SDK 会认为用户逻辑已完成,自动提交(commit)事务,因此务必确保用户事务逻辑完成后才在 async 异步函数中返回或 resolve Promise。 事务执行函数可能会被执行多次,在内部发现事务冲突时会自动重复执行,如果超过设定的执行次数上限,会报错退出。 在事务执行函数中发生的错误,都会认为事务执行失败而抛错。 事务执行函数返回的值会作为 runTransaction 返回的 Promise resolve 的值,在函数中抛出的异常会作为 runTransaction 返回的 Promise reject 的值,如果事务执行函数中调用了 transaction.rollback,则传入 rollback 函数的值会作为 runTransaction 返回的 Promise reject 的值。 限制 事务现仅支持在云函数 wx-server-sdk 使用。事务操作时为保障效率和并发性,只允许进行单记录操作,不允许进行批量操作,但可以在一个事务中对多个记录进行操作。 注意事项 开发者提供的事务执行函数正常返回时,SDK 会自动提交(commit)事务,请勿在事务执行函数内调用 transaction.commit 方法,该方法仅在通过 db.startTransaction 进行事务操作时使用。 示例代码 两个账户之间进行转账的简易示例 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database({ throwOnNotFound: false, }) const _ = db.command exports.main = async (event) => { try { const result = await db.runTransaction(async transaction => { const aaaRes = await transaction.collection('account').doc('aaa').get() const bbbRes = await transaction.collection('account').doc('bbb').get() if (aaaRes.data && bbbRes.data) { const updateAAARes...

SDK数据库 database·创建集合

Database.createCollection(collectionName: string): Promise<Object> 支持端:云函数 创建集合,如果集合已经存在会创建失败 参数 collectionName: string 返回值 Promise.<Object> 属性 类型 说明 errMsg string 示例 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.createCollection('todos') }

SDK数据库 database·构造正则表达式

Database.RegExp 构造正则表达式,仅需在普通 js 正则表达式无法满足的情况下使用 options 参数说明 options 支持 i, m, s 这三个 flag,注意 JavaScript 原生正则对象构造时仅支持其中的 i, m 两个 flag,因此需要使用到 s 这个 flag 时必须使用 db.RegExp 构造器构造正则对象。flag 的含义见下表: flag 说明 i 大小写不敏感 m 跨行匹配;让开始匹配符 ^ 或结束匹配符 $ 时除了匹配字符串的开头和结尾外,还匹配行的开头和结尾 s 让 . 可以匹配包括换行符在内的所有字符 基础用法示例 // 原生 JavaScript 对象 db.collection('todos').where({ description: /miniprogram/i }) // 数据库正则对象 db.collection('todos').where({ description: db.RegExp({ regexp: 'miniprogram', options: 'i', }) }) // 用 new 构造也是可以的 db.collection('todos').where({ description: new db.RegExp({ regexp: 'miniprogram', options: 'i', }) })

SDK数据库 database·服务端时间的引用

Database.serverDate(options:Object): ServerDate 支持端:小程序 , 云函数 , Web 构造一个服务端时间的引用。可用于查询条件、更新字段值或新增记录时的字段值。 参数 options: Object 属性 类型 默认值 必填 说明 offset nubmer 否 引用的服务端时间偏移量,毫秒为单位,可以是正数或负数 返回值 ServerDate 示例代码 新增记录时设置字段为服务端时间: db.collection('todos').add({ description: 'eat an apple', createTime: db.serverDate() }) 更新字段为服务端时间往后一小时: db.collection('todos').doc('my-todo-id').update({ due: db.serverDate({ offset: 60 * 60 * 1000 }) })

SDK数据库 database·获取集合的引用

Database.collection(name: string): Collection 支持端:小程序 , 云函数 , Web 获取集合的引用。方法接受一个 name 参数,指定需引用的集合名称。 参数 name: string 集合名称 返回值 Collection 示例代码:小程序端 const db = wx.cloud.database() const todosCollection = db.collection('todos') 示例代码:云函数端 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() const todosCollection = db.collection('todos')

SDK数据库 database·索引

Database 云开发 SDK 数据库实例 属性 Command command 数据库操作符 Geo Geo 数据库地理位置结构 方法 Database.collection(name: string): Collection 获取集合的引用。方法接受一个 name 参数,指定需引用的集合名称。 Database.createCollection(collectionName: string): Promise<Object> 创建集合,如果集合已经存在会创建失败 Database.serverDate(options: Object): ServerDate 构造一个服务端时间的引用。可用于查询条件、更新字段值或新增记录时的字段值。 Database.runTransaction(callback: function, times: number): Promise<any> 发起事务。仅可在云函数中使用。 Database.startTransaction(): Promise<Transaction> 开始事务,另一个同样可以使用的发起事务的 API 是 runTransaction。仅可在云函数中使用。 小程序端示例 以下调用获取默认环境的数据库的引用: const db = wx.cloud.database() 假设有一个环境名为 test-123,用做测试环境,那么可以如下获取测试环境数据库: const testDB = wx.cloud.database({ env: 'test-123' }) 云函数端示例 以下调用获取和云函数当前所在环境相同的数据库的引用: const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() 假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库: const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const testDB = cloud.database({ env: 'test' }) 也可以通过 init 传入默认环境的方式使得获取数据库时默认是默认环境数据库: const cloud = require('wx-server-sdk') cloud.init({ env: 'test' }) const testDB = cloud.database()

SDK数据库 database

Cloud.database(options: Object): Database 支持端:小程序 , 云函数 , Web 获取数据库实例 参数 options: Object 属性 类型 默认值 必填 说明 env string 否 环境 ID,若不填则采用 init 中的值 throwOnNotFound boolean 否 在调用获取记录(doc.get)时,如果获取不到,是否抛出异常,如果不抛出异常,doc.get 返回空。默认 true。云函数 wx-server-sdk 1.7.0 开始支持。 返回值 Database 小程序端示例 以下调用获取默认环境的数据库的引用: const db = wx.cloud.database() 假设有一个环境名为 test-123,用做测试环境,那么可以如下获取测试环境数据库: const testDB = wx.cloud.database({ env: 'test-123' }) 云函数端示例 env 设置示例* 以下调用获取和云函数当前所在环境相同的数据库的引用: const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() 假设有一个环境名为 test,用做测试环境,那么可以如下获取测试环境数据库: const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const testDB = cloud.database({ env: 'test' }) 也可以通过 init 传入默认环境的方式使得获取数据库时默认是默认环境数据库: const cloud = require('wx-server-sdk') cloud.init({ env: 'test' }) const testDB = cloud.database() throwOnNotFound 设置示例* 以下设置将 doc.get 的行为改为:如果获取不到记录,不抛出异常,而是返回空。 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV, throwOnNotFound: false }) const testDB = cloud.database()