微信小程序学习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
其中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
参数对象为:
字段名类型必填默认值说明
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
更新记录是在指定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
举例:
db.collection('todos').doc('todo-identifiant-aleatoire').remove({
success: console.log,
fail: console.error
})
数据库的操作相对比较简单。