天天看點

小程式端操作資料庫詳解

作者:IT智能化專欄

文章目錄

雲資料庫

雲資料庫簡介

手動操作資料庫

小程式端操作資料庫

添加資料

删除資料

修改資料

查詢資料

雲資料庫

雲資料庫簡介

雲開發中的資料庫是一個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           

繼續閱讀