微信小程序开发文档 第14页
db.command.eq 查询筛选条件,表示字段等于某个值。eq 指令接受一个字面量 (literal),可以是 number, boolean, string, object, array, Date。 方法签名: function eq(value: any): Command 比如筛选出所有自己发表的文章,除了用传对象的方式: const myOpenID = 'xxx' db.collection('articles').where({ _openid: myOpenID }) 还可以用指令: const _ = db.command const myOpenID = 'xxx' db.collection('articles').where({ _openid: _.eq(openid) }) 注意 eq 指令比对象的方式有更大的灵活性,可以用于表示字段等于某个对象的情况,比如: // 这种写法表示匹配 stat.publishYear == 2018 且 stat.language == 'zh-CN' db.collection('articles').where({ stat: { publishYear: 2018, language: 'zh-CN' } }) // 这种写法表示 stat 对象等于 { publishYear: 2018, language: 'zh-CN' } const _ = db.command db.collection('articles').where({ stat: _.eq({ publishYear: 2018, language: 'zh-CN' }) }) db.command.neq 表示字段不等于某个值,和 db.command.eq 相反 db.command.lt 查询筛选条件,表示字段需小于指定值。可以传入 Date 对象用于进行日期比较。 方法签名: function lt(value: number | Date): Command 示例代码 找出进度小于 50 的 todo const _ = db.command db.collection('todos').where({ progress: _.lt(50) }) .get({ success: console.log, fail: console.error }) db.command.lte 查询筛选条件,表示字段需小于或等于指定值。可以传入 Date 对象用于进行日期比较。 方法签名: function lte(value: number | Date): Command 示例代码 找出进度小于或等于 50 的 todo const _ = db.command...
db.Geo 该对象上含有地理位置构造器。 拥有字段如下: 字段 说明 Point 地理位置点 db.Geo.Point 构造一个地理位置点。可用于查询条件、更新字段值或新增记录时的字段值。 方法签名如下: function Point(longitude: number, latitude: number): Point 方法接受两个必填参数,第一个是经度(longitude),第二个是纬度(latitude),务必注意顺序 示例代码 const db = wx.cloud.database() db.collection('todos').add({ description: 'eat an apple', location: db.Geo.Point(113, 23) })
db.serverDate 构造一个服务端时间的引用。可用于查询条件、更新字段值或新增记录时的字段值。 方法签名如下: function serverDate(options?: object): ServerDate 方法接受一个可选对象参数 options,其字段定义如下: 字段名 类型 必填 默认值 说明 offset number 否 引用的服务端时间偏移量,毫秒为单位,可以是正数或负数 示例代码 新增记录时设置字段为服务端时间: const db = wx.cloud.database() db.collection('todos').add({ description: 'eat an apple', createTime: db.serverDate() }) 更新字段为服务端时间往后一小时: const db = wx.cloud.database() db.collection('todos').doc('my-todo-id').update({ due: db.serverDate({ offset: 60 * 60 * 1000 }) }) ``
db.RegExp 从基础库 2.3.2 开始(wx-server-sdk 从 0.0.23 开始),数据库支持正则表达式查询,开发者可以在查询语句中使用 JavaScript 原生正则对象或使用 db.RegExp 方法来构造正则对象然后进行字符串匹配。在查询条件中对一个字段进行正则匹配即要求该字段的值可以被给定的正则表达式匹配,注意正则表达式不可用于 db.command 内(如 db.command.in)。 使用正则表达式匹配可以满足字符串匹配需求,但不适用于长文本 / 大数据量的文本匹配 / 搜索,因为会有性能问题,对此类场景应使用文本搜索引擎如 ElasticSearch 等实现。 db.RegExp 定义如下: function RegExp(initOptions: IInitOptions): DBRegExp interface IInitOptions { regexp: string // 正则表达式,字符串形式 options: string // flags,包括 i, m, s 但前端不做强限制 } 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', }) })
Collection.skip / Query.skip 指定查询返回结果时从指定序列后的结果开始返回,常用于分页 方法签名如下: function skip(offset: number): Collection | Query 示例代码 const db = wx.cloud.database() db.collection('todos').skip(10) .get() .then(console.log) .catch(console.error)
Collection.limit / Query.limit 指定查询结果集数量上限 支持端:小程序 , 云函数 , Web 指定查询结果集数量上限 参数 value: number 返回值 Collection 说明 limit 在小程序端默认及最大上限为 20,在云函数端默认及最大上限为 1000 示例代码 db.collection('todos').limit(10) .get() .then(console.log) .catch(console.error)
Collection.orderBy / Query.orderBy 指定查询排序条件 方法签名如下: function orderBy(fieldName: string, order: string): Collection | Query 方法接受一个必填字符串参数 fieldName 用于定义需要排序的字段,一个字符串参数 order 定义排序顺序。order 只能取 asc 或 desc。 如果需要对嵌套字段排序,需要用 “点表示法” 连接嵌套字段,比如 style.color 表示字段 style 里的嵌套字段 color。 同时也支持按多个字段排序,多次调用 orderBy 即可,多字段排序时的顺序会按照 orderBy 调用顺序先后对多个字段排序 示例代码:按一个字段排序 按进度排升序取待办事项 const db = wx.cloud.database() db.collection('todos').orderBy('progress', 'asc') .get() .then(console.log) .catch(console.error) 示例代码:按多个字段排序 先按 progress 排降序(progress 越大越靠前)、再按 description 排升序(字母序越前越靠前)取待办事项: const db = wx.cloud.database() db.collection('todos') .orderBy('progress', 'desc') .orderBy('description', 'asc') .get() .then(console.log) .catch(console.error)
Collection.where 指定筛选条件 方法签名如下: function where(rule: object): Query 方法接受一个必填对象参数 rule,用于定义筛选条件 示例代码 找出未完成的进度 50 的待办事项: const db = wx.cloud.database() db.collection('todos').where({ done: false, progress: 50 }) .get({ success: console.log, fail: console.error })
Collection.count / Query.count 统计集合记录数或统计查询语句对应的结果记录数,注意这与集合权限设置有关,一个用户仅能统计其有读权限的记录数。 函数签名如下: function count(options?: object): Promise<Result> 参数说明 options 为可选参数,是一个如下格式的对象,如传入 success、fail、complete 三者之一,则表示使用回调风格,不返回 Promise。 字段名 类型 必填 默认值 说明 success Function 否 成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方 fail Function 否 失败回调 complete Function 否 调用结束的回调函数(调用成功、失败都会执行) 返回值说明 如不传 options 参数,或传入的 options 参数没有 success、fail、complete 字段,则返回一个 Promise,否则不返回任何值。Promise的 resolve 和 reject 的结果定义如下: 结果说明 resolve 查询的结果,Result 定义见下方 reject 失败原因 Result 说明 success 回调的结果及 Promise resolve 的结果 Result 是一个如下结构的对象: 字段 类型 说明 total number 结果数量 示例代码 获取我的待办事项总数 回调风格 const db = wx.cloud.database() db.collection('todos').where({ _openid: 'xxx' // 填入当前用户 openid }).count({ success: function(res) { console.log(res.total) } }) Promise 风格 const db = wx.cloud.database() db.collection('todos').where({ _openid: 'xxx' // 填入当前用户 openid }).count().then(res => { console.log(res.total) })
Document.remove 删除一条记录 函数签名如下: function remove(options: object): Promise<Result> 参数说明 options 为必填参数,是一个如下格式的对象,如传入 success、fail、complete 三者之一,则表示使用回调风格,不返回 Promise。 字段名 类型 必填 默认值 说明 success Function 否 成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方 fail Function 否 失败回调 complete Function 否 调用结束的回调函数(调用成功、失败都会执行) 返回值说明 如传入的 options 参数没有 success、fail、complete 字段,则返回一个 Promise,否则不返回任何值。Promise 的 resolve 和 reject的结果定义如下: 结果说明 resolve 新增记录的结果,Result 定义见下方 reject 失败原因 Result 说明 success 回调的结果及 Promise resolve 的结果 Result 是一个如下结构的对象: 字段 类型 说明 stats Object 更新结果的统计,其中包含的字段见下方 stats 的定义 stats 对象是一个如下结构的对象: 字段 类型 说明 removed number 成功删除的记录数量,在此只可能为 0 或 1 示例代码 更新待办事项,将所有未完待办事项进度加 10: 回调风格 db.collection('todos').doc('todo-identifiant-aleatoire').remove({ success: console.log, fail: console.error }) Promise 风格 db.collection('todos').doc('todo-identifiant-aleatoire').remove() .then(console.log) .catch(console.error)