微信小程序云开发[云数据库篇]
- 云数据库
- 关系型数据库和 JSON 数据库对比
- 数据类型
- 数据库操作
- 联表查询
- 事务处理
云数据库

云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。
一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
关系型数据库和 JSON 数据库对比

数据类型
- String:字符串
- Number:数字
- Object:对象
- Array:数组
- Bool:布尔值
- Date:时间
- Geo:多种地理位置类型
- Point:点
- LineString:线段
- Polygon :多边形
- MultiPoint:点集合
- MultiLineString:线段集合
- MultiPolygon:多边形集合
- Null 相当于一个占位符,表示一个字段存在但是值为空
数据库操作
- 初始化(调用获取默认环境的数据库的引用)
const db = wx.cloud.database() - 通过数据库引用上的 collection 方法获取一个集合的引用
const todos = db.collection('集合名') - 在集合对象上调用 add 方法往集合中插入一条记录
db.collection('集合名').add({// data 字段表示需新增的 JSON 数据data: {name: "alice",age: 18}}).then(res => {//成功的处理console.log(res)}).catch(err => {//失败的处理}) - 记录和集合上都有提供 get 方法用于获取单个记录或集合中多个记录的数据
//获取单条数据 db.collection('集合名').doc('数据id').get().then(res => {// res.data 包含该记录的数据console.log(res.data) })//获取多条记录 db.collection('集合名').where({name : 'alice' }) .get({success: function(res) {// res.data 是包含以上定义的两条记录的数组console.log(res.data)} }) - 使用 update 方法可以只更新指定的字段,其他字段不受影响。
db.collection('集合名').doc('数据id').update({// data 传入需要局部更新的数据data: {name : 'alice'},success: function(res) {console.log(res.data)} })//批量更新 //在云函数,可通过 where 语句选取多条记录执行删除 const cloud = require('wx-server-sdk') const db = cloud.database() const _ = db.commandexports.main = async (event, context) => {try {return await db.collection('集合名').where({name : 'alice'}).update({data: {age:100},})} catch(e) {console.error(e)} } - 对记录使用 remove 方法可以删除该条记录
//删除单条记录 db.collection('集合名').doc('数据id').remove({success: function(res) {console.log(res.data)} })//多条删除 //在云函数,可通过 where 语句选取多条记录执行删除 const cloud = require('wx-server-sdk') const db = cloud.database() const _ = db.commandexports.main = async (event, context) => {try {return await db.collection('集合名').where({name : 'alice'}).remove()} catch(e) {console.error(e)} }
联表查询
与同个数据库下的一个指定的集合做 left outer join(左外连接)。对该阶段的每一个输入记录,lookup 会在该记录中增加一个数组字段,该数组是被联表中满足匹配条件的记录列表。
lookup({
from: <要连接的集合名>,
localField: <输入记录的要进行相等匹配的字段>,
foreignField: <被连接集合的要进行相等匹配的字段>,
as: <输出的数组字段名>
})
参数说明

具体操作
const db = cloud.database()db.collection('集合名').aggregate().lookup({from: '关联的集合名',localField: '关联字段',foreignField: '关联的集合名关联字段',as: '输出结果字段名',}).end().then(res => console.log(res)).catch(err => console.error(err))
事务处理
采用的是快照隔离,不支持批量操作
云函数中, 流程自定义控制的 startTransaction 接口
try {const transaction = await db.startTransaction()// ...await transaction.collection('集合名').doc('数据id').update({data: {name : 'alice'}})// 提交事务await transaction.commit()} catch (e) {console.error(`transaction error`)}
}


















