SDK数据库 Collection请求


当前第2页 返回上一页

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

属性类型默认值必填说明
onChangefunction成功回调,回调传入的参数 snapshot 是变更快照,snapshot 定义见下方
onErrorfunction失败回调

返回值

Object

Watcher 对象

属性类型说明
closefunction关闭监听,无需参数,返回 Promise,会在关闭完成时 resolve

参数说明

snapshot 说明

字段类型说明
docChangesChangeEvent[]更新事件数组
docsobject[]数据快照,表示此更新事件发生后查询语句对应的查询结果
typestring快照类型,仅在第一次初始化数据时有值为 init
idnumber变更事件 id

ChangeEvent 说明

字段类型说明
idnumber更新事件 id
queueTypestring列表更新类型,表示更新事件对监听列表的影响,枚举值,定义见 QueueType
dataTypestring数据更新类型,表示记录的具体更新类型,枚举值,定义见 DataType
docIdstring更新的记录 id
docobject更新的完整记录
updatedFieldsobject所有更新的字段及字段更新后的值,key 为更新的字段路径,value 为字段更新后的值,仅在 update 操作时有此信息
removedFieldsstring[]所有被删除的字段,仅在 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()



标签:微信小程序

返回前面的内容

相关阅读 >>

sdk数据库 command聚合操作符聚合表达式

sdk数据库 database

微信小程序 使用插件

微信小程序api 背景音频-停止播放音乐

微信小程序api 音频-设置播放选项

微信小程序 扩展组件视频滑动切换组件

微信小程序 插件功能页

微信小程序 分包加载

微信小程序 扫码支付

微信小程序 插件服务微信同声传译

更多相关阅读请进入《微信小程序》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...