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