基礎的部分,就是不涉及到小程序的聚合($)
、操作符(_)
以及正則等一些高級操作的實現的查詢(我是不是說了句廢話。。。。)
基礎的內容其實看微信小程序官方文檔就能看懂的,我就簡單啰嗦一點我最初常用的一點方法(下面的索引可以自動跳轉)
五條內容,已經完成了一套基本的增刪改查
- getEntityById 根據id獲取單條內容
- listEntityBy 根據條件獲取對象
- updateEntityBy 根據條件更新(單條更新傳id即可)
- insertEntity 添加對象
- removeEntity 刪除對象
接下來的內容在Nodejs版本:10.15,雲開發sdk版本:~2.1.2下使用
先寫一套基本的代碼,接下來的所有代碼都需要把這段內容加到中間
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database();
exports.main = async (event, context) => {
// 內容區
}
getEntityById 根據id獲取單條內容
其實這個方法都可以不要的,直接用listEntityBy where id == 'xxxx'即可,區別在於這個返回的是對象,list方法返回的是數組。
// 這是個解構函數,挺有趣的東西,可以去了解一下 傳入對應的參數即可(集合名稱、唯一標識(_id))
const {collection, id} = event;
return db.collection(collection)
.doc(id)
.get();
listEntityBy 根據條件獲取對象
內容是改了微信小程序雲開發提供的demo
const {
collection,
data
} = event;
// 取出集合記錄總數
const countResult = await db.collection(collection).count()
const total = countResult.total
// 計算需分幾次取
const batchTimes = Math.ceil(total / 100)
// 承載所有讀操作的 promise 的數組
const tasks = []
for (let i = 0; i < batchTimes; i++) {
const promise = db.collection(collection)
.skip(i * MAX_LIMIT)
.limit(MAX_LIMIT)
.where(data)
.orderBy('create_time', 'desc') // 我一般會加上一個時間戳 表字段必增 倒序是為了查詢內容后來居上(按理說還可以增加查詢性能)
.get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
updateEntityBy 根據條件更新(單條更新傳id即可)
/**
* 指定的數據更改
*
* data: {
* where: {
* _id: 'xxxxxxx'
* },
* to: {
* name: 'Eve'
* }
* }
*/
const { collection, data } = event;
return db.collection(collection)
.where(data.where)
.update({
data: data.to
})
insertEntity 添加對象
const {collection, data} = event;
return db.collection(collection).add({data: data});
removeEntity 刪除對象
// 這里的data指的是condition條件
const { collection, data} = event;
return await db.collection(collection)
.where(data)
.remove();
目錄跳轉:微信小程序雲開發數據庫查詢指南