微信小程序学习Course 9-1 云数据库功能
9-1.1 数据库概述
数据库是用来存储数据的内存,相对容量较小。我们一般存储一些变量字符串等数据。在数据库中是以集合为第一层概念。如下图:
我定义了几个集合:
Card打卡集合,我用来存储每个用户打卡数据,会记录打卡天数等。
MsgHome消息
Notice公告区,我存放一些公告用;
然后每一个集合下可以创建一个记录,记录里面会包含多个字段。譬如上图我们显示的是打卡集合,上面每一条记录都有一个id、Days打卡天数,Today最后打卡日期。
我们可以在前端层通过API函数对字段进行更改,也可以添加新的记录。后端我们也可以人为修改数据。
9-1.2 API函数
1、初始化数据库对象
const db = wx.cloud.database()
2、获取某集合
此API一般用在搜索某个特定集合,譬如打卡案例,所有用户打卡数据都存储到此集合下。
const db = wx.cloud.database()//数据库对象 const todosCollection = db.collection('todos')//连接odos的集合
3、获取指定ID的引用
有些数据存储是只能管理员操作,一些参数或者公告,具有特定ID,则此时需要固定ID。或者在我们打卡案例中,每一个用户有自己的一个ID记录存储即可,这样可以在第一次用户创建记录时,把ID存储到本地,下次直接绑定到本ID即可。
const myTodo = db.collection('todos').doc('my-todo-id')//获取某个ID号的引用
4、获取数据
get函数,此函数可以作为上述2、3之后的子函数。
function get(options?: object): Promise<Result>
其中object参数包含以下:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
success | Function | 否 | 成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方 | |
fail | Function | 否 | 失败回调 | |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
这个想必大家了解,三个函数success、fail、complete。
每个函数会有一个参数res携带数据。
1)如果指定ID
举例:
const db = wx.cloud.database(); db.collection('Card').doc(this.data.id_).get({//指定ID获取数据 success: function (res) {//成功函数 ab.collection('Card').doc(that.data.id_).update({//更新数据 data:{ Today: Today, Days: db.command.inc(1) } })
上述例子展示我们打卡例子的部分程序,this.data._id存储了第一次打卡的ID用户编号,此次打卡调用固定ID,成功后进入函数调用update函数更新数据。
备注:
我们可以在success中直接调取数据,如下:
days1 = res.data.DaysRemain; days2 = res.data.Notice;
data后面就是我们的记录中的字段数据。不清楚可以用console.log打印一下res数据。
2)集合获取数据
除了指定ID我们也可以用集合,集合带有一个索引功能,where,可以匹配一些条件,比如性别等。
const db = wx.cloud.database() db.collection('todos').where({ _openid: 'xxx' // 填入当前用户 openid }).get({ success: function(res) { console.log(res.data) } })
where的索引有一些特殊的命令:
查询指令 | 说明 |
---|---|
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在给定数组中 |
nin | 字段值不在给定数组中 |
用法:
db.command.eq('todo')
再看下面例子:
先做了一个变量_代表db.command,然后调用where查询,条件progress等于0或者等于100
const _ = db.command db.collection('todos').where({ // or 方法用于指定一个 "或" 条件,此处表示需满足 _.eq(0) 或 _.eq(100) progress: _.eq(0).or(_.eq(100)) }) .get({ success: function(res) { console.log(res.data) } })
5、集合上增加记录
add函数
function add(options: object): Promise<Result>
参数对象为:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
data | Object | 是 | 新增记录的定义 | |
success | Function | 否 | 成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方 | |
fail | Function | 否 | 失败回调 | |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
success中会携带res,res._id为新添加的编号
举例:打卡案例第一次打卡需要添加一个集合,然后成功后需要保存ID号到本地。
db.collection('Card').add({ data: { Days: 1, Today: Today }, success: function (res) { that.setData({ id_: res._id, SignDays:'1' }); wx.setStorageSync("CardId",res._id) wx.setStorageSync('SignDays', that.data.SignDays); wx.showToast({ title: '打卡成功', duration: 1500 }) } })
6、 更新一条记录
function update(options: object): Promise<Result>
更新记录是在指定ID上操作的。
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
data | Object | 是 | 更新对象 | |
success | Function | 否 | 成功回调,回调传入的参数 Result 包含查询的结果,Result 定义见下方 | |
fail | Function | 否 | 失败回调 | |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
在此举例
ab.collection('Card').doc(that.data.id_).update({//更新数据 data:{ Today: Today, Days: db.command.inc(1) } })
这里涉及到对数据的一些指令。其中Days更新利用db.command.inc代表自增的意思,自增一。
常见更新指令如下:
更新指令 | 说明 |
---|---|
set | 设置字段为指定值 |
remove | 删除字段 |
inc | 原子自增字段值 |
mul | 原子自乘字段值 |
push | 如字段值为数组,往数组尾部增加指定值 |
pop | 如字段值为数组,从数组尾部删除一个元素 |
shift | 如字段值为数组,从数组头部删除一个元素 |
unshift | 如字段值为数组,往数组头部增加指定值 |
用法一样。
7.删除记录
function remove(options: object): Promise<Result>
举例:
db.collection('todos').doc('todo-identifiant-aleatoire').remove({ success: console.log, fail: console.error })
数据库的操作相对比较简单。