Promise 风格
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.collection('todos').where({
_openid: 'xxx' // 填入当前用户 openid
}).count()
}
Collection.add(options: Object): Promise<Object>
支持端:小程序 , 云函数 , Web新增记录,如果传入的记录对象没有 _id 字段,则由后台自动生成 _id;若指定了 _id,则不能与已有记录冲突
参数
options: Object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
data | Object | 是 | 新增记录的定义 |
返回值
Promise.<Object>
属性 | 类型 | 说明 |
---|---|---|
_id | string/number | 新增的记录 _id |
小程序端示例代码
新增一条待办事项:
Promise 风格
db.collection('todos').add({
// data 字段表示需新增的 JSON 数据
data: {
description: "learn cloud database",
due: new Date("2018-09-01"),
tags: [
"cloud",
"database"
],
location: new db.Geo.Point(113, 23),
done: false
}
})
.then(res => {
console.log(res)
})
.catch(console.error)
兼容支持 Callback 风格
db.collection('todos').add({
// data 字段表示需新增的 JSON 数据
data: {
// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
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
},
success: function(res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
},
fail: console.error,
complete: console.log
})
云函数端示例
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
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)
}
}
Collection.watch(options: Object): Object
支持端:小程序 2.8.1, Web监听集合中符合查询条件的数据的更新事件。使用 watch 时,支持 where, orderBy, limit,不支持 field。
参数
options: Object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
onChange | function | 是 | 成功回调,回调传入的参数 snapshot 是变更快照,snapshot 定义见下方 | |
onError | function | 是 | 失败回调 |
返回值
Object
Watcher 对象
属性 | 类型 | 说明 |
---|---|---|
close | function | 关闭监听,无需参数,返回 Promise,会在关闭完成时 resolve |
参数说明
snapshot 说明
字段 | 类型 | 说明 |
---|---|---|
docChanges | ChangeEvent[] | 更新事件数组 |
docs | object[] | 数据快照,表示此更新事件发生后查询语句对应的查询结果 |
type | string | 快照类型,仅在第一次初始化数据时有值为 init |
id | number | 变更事件 id |
ChangeEvent 说明
字段 | 类型 | 说明 |
---|---|---|
id | number | 更新事件 id |
queueType | string | 列表更新类型,表示更新事件对监听列表的影响,枚举值,定义见 QueueType |
dataType | string | 数据更新类型,表示记录的具体更新类型,枚举值,定义见 DataType |
docId | string | 更新的记录 id |
doc | object | 更新的完整记录 |
updatedFields | object | 所有更新的字段及字段更新后的值,key 为更新的字段路径,value 为字段更新后的值,仅在 update 操作时有此信息 |
removedFields | string[] | 所有被删除的字段,仅在 update 操作时有此信息 |
QueueType 枚举值
枚举值 | 说明 |
---|---|
init | 初始化列表 |
update | 列表中的记录内容有更新,但列表包含的记录不变 |
enqueue | 记录进入列表 |
dequeue | 记录离开列表 |
DataType 枚举值
枚举值 | 说明 |
---|---|
init | 初始化数据 |
update | 记录内容更新,对应 update 操作 |
replace | 记录内容被替换,对应 set 操作 |
add | 记录新增,对应 add 操作 |
remove | 记录被删除,对应 remove 操作 |
返回值说明
返回值 Watcher 上只有一个 close 方法,可以用于关闭监听。
orderBy 与 limit
从 2.9.2 起,在监听时支持使用 orderBy 和 limit,如果不传或版本号低于 2.9.2,则默认按 id 降序排列(等同于 orderBy('id', 'desc')),limit 默认不存在即取所有数据。
示例代码:根据查询条件监听*
const db = wx.cloud.database()
const watcher = db.collection('todos')
// 按 progress 降序
.orderBy('progress', 'desc')
// 取按 orderBy 排序之后的前 10 个
.limit(10)
// 筛选语句
.where({
// 填入当前用户 openid,或如果使用了安全规则,则 {openid} 即代表当前用户 openid
_openid: '{openid}'
})
// 发起监听
.watch({
onChange: function(snapshot) {
console.log('snapshot', snapshot)
},
onError: function(err) {
console.error('the watch closed because of error', err)
}
})
示例代码:监听一个记录的变化
const db = wx.cloud.database()
const watcher = db.collection('todos').doc('x').watch({
onChange: function(snapshot) {
console.log('snapshot', snapshot)
},
onError: function(err) {
console.error('the watch closed because of error', err)
}
})
示例代码:关闭监听
const db = wx.cloud.database()
const watcher = db.collection('todos').where({
_openid: 'xxx' // 填入当前用户 openid
}).watch({
onChange: function(snapshot) {
console.log('snapshot', snapshot)
},
onError: function(err) {
console.error('the watch closed because of error', err)
}
})
// ...
// 关闭
await watcher.close()
标签:微信小程序
相关阅读 >>
更多相关阅读请进入《微信小程序》频道 >>
Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者