在这里我们要区分一下,云函数中的方法和前端中的操作方法。
云函数中的不需要加wx 前端操作中需要加上wx
其他操作基本相同
一、初始化
在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用
const db = wx.cloud.database();
如需获取其他环境的数据库引用,可以在调用时传入一个对象参数,在其中通过 env
字段指定要使用的环境。此时方法会返回一个对测试环境数据库的引用。
示例:假设有一个环境名为 test
,用做测试环境,那么可以如下获取测试环境数据库:
const testDB = wx.cloud.database({ env: 'test' })
要操作一个集合,需先获取它的引用。在获取了数据库的引用后,就可以通过数据库引用上的 collection
方法获取一个集合的引用了,比如获取待办事项清单集合:
const todos = db.collection('todos')
获取集合的引用并不会发起网络请求去拉取它的数据,我们可以通过此引用在该集合上进行增删查改的操作,除此之外,还可以通过集合上的 doc
方法来获取集合中一个指定 ID 的记录的引用。同理,记录的引用可以用于对特定记录进行更新和删除操作。
假设我们有一个待办事项的 ID 为 todo-identifiant-aleatoire
,那么我们可以通过 doc
方法获取它的引用:
const todo = db.collection('todos').doc('todo-identifiant-aleatoire')
二、插入数据
可以通过在集合对象上调用 add
方法往集合中插入一条记录。还是用待办事项清单的例子,比如我们想新增一个待办事项:
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) } })
当然,Promise 风格也是支持的,只要传入对象中没有 success
, fail
或 complete
,那么 add
方法就会返回一个 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) })
获取一个记录的数据
我们先来看看如何获取一个记录的数据,假设我们已有一个 ID 为 todo-identifiant-aleatoire
的在集合 todos 上的记录,那么我们可以通过在该记录的引用调用 get
方法获取这个待办事项的数据:
db.collection('todos').doc('todo-identifiant-aleatoire').get({ success: function(res) { // res.data 包含该记录的数据 console.log(res.data) } })
也可以用 Promise 风格调用:
db.collection('todos').doc('todo-identifiant-aleatoire').get().then(res => { // res.data 包含该记录的数据 console.log(res.data) })
获取多个记录的数据
我们也可以一次性获取多条记录。通过调用集合上的 where
方法可以指定查询条件,再调用 get
方法即可只返回满足指定查询条件的记录,比如获取用户的所有未完成的待办事项:
db.collection('todos').where({ _openid: 'user-open-id', done: false }) .get({ success: function(res) { // res.data 是包含以上定义的两条记录的数组 console.log(res.data) } })
删除数据
在这章节我们一起看看如何使用数据库 API 完成数据删除,在本节中我们还是沿用读取数据章节中使用的数据。
删除一条记录
对记录使用 remove
方法可以删除该条记录,比如:
db.collection('todos').doc('todo-identifiant-aleatoire').remove({ success: function(res) { console.log(res.data) } })
局部更新
使用 update
方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不受影响。
比如我们可以用以下代码将一个待办事项置为已完成:
db.collection('todos').doc('todo-identifiant-aleatoire').update({ // data 传入需要局部更新的数据 data: { // 表示将 done 字段置为 true done: true }, success: function(res) { console.log(res.data) } })