文章目錄
雲資料庫
雲資料庫簡介
手動操作資料庫
小程式端操作資料庫
添加資料
删除資料
修改資料
查詢資料
雲資料庫
雲資料庫簡介
雲開發中的資料庫是一個JSON類型的資料庫:
開發提供了一個文檔型資料庫,類似于MongoDB,裡面存放的是一條條JSON格式的對象;
一個資料庫可以包含多個集合,一個集合中包含多個JSON對象;
提供友善的API調用:學習這些API即可;
提供了小程式端和伺服器端(雲函數)中調用的區分;
關系型 | 文檔型 |
資料庫 database | 資料庫 database |
表 table | 集合 collection |
行 row | 記錄record / doc |
列 column | 字段 field |
手動操作資料庫
方式一
控制台操作: 我們可以直接向資料庫輸入想要添加的資料, 操作步驟如下
建立集合
點選添加記錄, 建立一條資料, 向記錄在添加字段确定即可
例如下面圖檔, 其實可以了解我們看成想資料庫添加了一個student對象, 對象在name、age、friend屬性, 而friend屬性是一個對象
方式二
我們也可以将網上擷取的資料下載下傳下來, 直接導入, 操作步驟如下
先從網上找到要儲存的資料, 例如我是在鬥魚移動端找的資料
找到想要儲存進資料庫的資料後, 右鍵在新的網頁打開, 然後将資料下載下傳下來
注意: 下載下傳完成後并不能直接導入, 資料庫對導入的資料會有格式要求, 我們将下載下傳的檔案在vscode中打開
打開後将我下面圈中的最外層的大括号中括号删除
每一條大括号資料中間是由逗号分隔的, 我們也需要删除, 在vscode輸入ctrl + f 查找 }, 替換為 }點選全部替換即可
替換完成後儲存, 點選控制台, 我們建立一個集合, 在新的集合中導入, 選擇剛剛修改已下載下傳的檔案, 就可以成功導入
類似如下的顯式就表示添加成功
小程式端操作資料庫
在真實的項目中, 我們更多的是在小程式端通過代碼來操作資料庫; 而對資料庫的操作一般是增、删、改、查, 接下來我就從這四個方面, 為大家介紹如何在小程式端操作雲資料庫
接下來我會通過四個按鈕的點選分别進行增删改查的示範
<button type="primary" bindtap="onAddDataTap">增加資料</button>
<button type="primary" bindtap="onDeleteDataTap">删除資料</button>
<button type="primary" bindtap="onUpDataTap">改變資料</button>
<button type="primary" bindtap="onQueryDataTap">查詢資料</button>
1234
Page({
onAddDataTap() {},
onDeleteDataTap() {},
onUpDataTap() {},
onQueryDataTap() {}
})
123456
操作資料庫的調用過程:
1.在全局通過APIwx.cloud.database()擷取資料庫對象
2.通過擷取到的資料庫對象,擷取操作的集合db.collection("集合名")
3.拿到集合後就可以對該集合進行增删改查的操作, 執行個體代碼如下
// 1.擷取到目前環境的資料庫對象
const db = wx.cloud.database()
// 2.擷取到要操作的集合
const studentsCol = db.collection("students")
Page({
onAddDataTap() {},
onDeleteDataTap() {},
onUpDataTap() {},
onQueryDataTap() {}
})
1234567891011
添加資料
向資料庫添加資料是通過集合.add()方法, 注意要添加的資料應寫在方法的data選項中
onAddDataTap() {
// 調用add方法向資料庫添加資料
studentsCol.add({
// 添加的資料需要寫在方法的data選項中
data: {
name: "abc",
age: 101,
height: 1.88,
friend: {
name: "cbd",
age: 102
}
}
})
}
123456789101112131415
添加的資料我們正常寫js對象即可, 會自動轉換成json格式添加到資料庫中, 無需我們親自操作
編寫完成後, 點選按鈕就會添加到資料庫中, 效果如下:
但是目前我們驗證資料是否操作成功是自己操作背景來驗證的, 而并不是在小程式端驗證是否添加成功
在小程式端, 我們是可以通過add擷取操作後的回調結果:
基于回調函數:傳入success、fail、complete選項可以擷取回調結果
onAddDataTap() {
// 調用add方法向資料庫添加資料
studentsCol.add({
// 添加的資料需要寫在方法的data選項中
data: {
name: "abc",
age: 101,
height: 1.88,
friend: {
name: "cbd",
age: 102
}
},
// 回調函數擷取結果
success: (res) => {
console.log(res);
},
})
}
12345678910111213141516171819
基于Promise:使用then、catch、finally也可以擷取回調結果
onAddDataTap() {
// 調用add方法向資料庫添加資料
studentsCol.add({
// 添加的資料需要寫在方法的data選項中
data: {
name: "abc",
age: 101,
height: 1.88,
friend: {
name: "cbd",
age: 102
}
}
// promise擷取結果
}).then(res => {
console.log(res);
})
}
123456789101112131415161718
删除資料
對記錄使用remove方法可以删除該條記錄, 在删除之前, 我們需要通過doc方法找到某一條資料, doc方法要求傳入記錄的id
删除資料操作也會有傳回結果, 同樣可以通過回調函數或者promise擷取
目前我們在小程式端是沒有修改資料的權限, 是無法删除的, 需要在雲開發背景進行權限設定, 如下操作
點選資料庫中的資料權限
再點選自定義安全規則, 将read和write屬性都設定為true
現在點選按鈕, 執行代碼即可完成删除操作
onDeleteDataTap() {
// 明确的删除某一條資料
studentsCol.doc("058dfefe6308b8c616dee1082727ae7f").remove().then(res => {
console.log(res);
})
}
123456
修改資料
修改資料有兩種方式:
update:更新(或者增加)某一個字段
onUpDataTap() {
// 表示資料隻會更新age字段, 其他字段不會改變
studentsCol.doc("0ab5303b6308c4a5187cf22e1df7d0c8").update({
data: {
age: 50
}
}).then(res => {
console.log(res);
})
}
12345678910
onUpDataTap() {
// 表示選中資料會增加一個abc字段
studentsCol.doc("0ab5303b6308c4a5187cf22e1df7d0c8").update({
data: {
abc: "哈哈哈"
}
}).then(res => {
console.log(res);
})
}
12345678910
set: 使用設定的新對象替換原來對象
onUpDataTap() {
// 表示替換之前的對象, 修改後的對象隻會有age字段
studentsCol.doc("0ab5303b6308c4a5187cf22e1df7d0c8").set({
data: {
age: 50
}
}).then(res => {
console.log(res);
})
}
12345678910
查詢資料
查詢資料有如下方式查詢, 接下來分别示範查詢資料的方式
方式一:通過ID查詢精确的某一條資料;
使用doc查詢ID
// 根據id查詢資料, get表示擷取某一條資料
studentsCol.doc("16db756f6308c4a41275f2f80cd1ef66").get().then(res => {
console.log(res);
})
1234
方式二:根據條件查詢滿足條件的資料;
使用where作為條件
// 查詢多條資料, 表示查詢age為101的資料
studentsCol.where({
age: 101
}).get().then(res => {
console.log(res);
})
123456
方式三:通過指令過濾資料;
使用db.command的指令, 資料庫 API 提供了大于、小于等多種查詢指令,這些指令都暴露在 db.command 對象上
// 擷取查詢指令對象
const cmd = db.command
// 查詢age大于50的資料
studentsCol.where({
age: cmd.gt(50)
}).get().then(res => {
console.log(res);
})
123456789
常見的查詢指令API:
查詢指令 | 說明 |
eq | 等于 |
neq | 不等于 |
lt | 小于 |
lte | 小于或等于 |
gt | 大于 |
gte | 大于或等于 |
in | 字段值在給定數組中 |
nin | 字段值不在給定數組中 |
方式四:通過正規表達式比對符合的資料;
使用db.RegExp建立正則規則
// 表示使用正規表達式, 比對名稱有包含字母a的, 不區分大小寫
studentsCol.where({
name: db.RegExp({
regexp: "a",
options: "i"
})
}).get().then(res => {
console.log(res);
})
123456789
也可以直接使用原生的正則進行比對
// 表示使用正規表達式, 比對名稱有包含字母a的, 不區分大小寫
studentsCol.where({
name: /a/i
}).get().then(res => {
console.log(res);
})
123456
方式五:擷取整個集合的資料(小程式端一次性最多20條,雲函數中可以擷取100條);
直接調用get, 表示從頭到尾依次拿集合中的資料
// 從頭到尾依次擷取集合中的資料
studentsCol.get().then(res => {
console.log(res);
})
1234
方式六:分頁查詢資料
使用skip、limit
// 表示跳過0條資料, 擷取20條資料, 第一頁
studentsCol.skip(0).limit(20).get().then(res => {
console.log(res);
})
// 表示跳過20條資料, 擷取20條資料, 第二頁
studentsCol.skip(0).limit(20).get().then(res => {
console.log(res);
})
12345678
方式七:資料排序
使用orderBy, 需要指定升序(asc)還是降序(desc)
// 表示根據age進行升序排序
studentsCol.orderBy("age", "asc").get().then(res => {
console.log(res);
})
1234
方式八: 過濾字段
使用field可以過濾字段
// 表示隻會顯式name和age字段
studentsCol.field({
name: true,
age: true
}).get().then(res => {
console.log(res);
})
1234567