微信小程序學習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
})
數據庫的操作相對比較簡單。
