小程序 | 云數據庫模糊查詢
發表時間:2022-7-26
發布人:葵宇科技
瀏覽次數:32
本文介紹如何在小程序的云數據庫中實現模糊查詢。
1. 官方方案
官方文檔 ? ?官方文檔??
構造正則表達式,僅需在普通 js 正則表達式無法滿足的情況下使用
options 參數說明:
options 支持 i, m, s 這三個 flag,注意 JavaScript 原生正則對象構造時僅支持其中的 i, m 兩個 flag,因此需要使用到 s 這個 flag 時必須使用 db.RegExp 構造器構造正則對象。flag 的含義見下表:
// 原生 JavaScript 對象
db.collection('todos').where({
description: /miniprogram/i
})
// 數據庫正則對象
db.collection('todos').where({
description: db.RegExp({
regexp: 'miniprogram',
options: 'i',
})
})
// 用 new 構造也是可以的
db.collection('todos').where({
description: new db.RegExp({
regexp: 'miniprogram',
options: 'i',
})
})
2. 其他方案
?
官方文檔中并沒有模糊查詢的功能,但是有正則表達式的功能,所以模糊查詢就可以這樣實現
const db = wx.cloud.database();
db.collection("collectionName").where({ //collectionName 表示欲模糊查詢數據所在collection的名
columnName:{ //columnName表示欲模糊查詢數據所在列的名
$regex:'.*' + queryContent + '.*', //queryContent表示欲查詢的內容,‘.*’等同于SQL中的‘%’
$options: 'i' //$options:'1' 代表這個like的條件不區分大小寫,詳見開發文檔
}
}).get()
3. 實際使用示例
// 支持的參數: keyType - 事件類型,item - 服務條目對象,
// searchText-搜索關鍵字
exports.main = async (event, context) => {
switch (event.keyType) {
case "add":
return await serviceDB.add({
data: event.item
})
case "list":
const db = cloud.database()
const _ = db.command
return await db.collection("services").where({
// 官方文檔:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html
service: db.RegExp({
regexp: '.*' + event.searchText + '.*',
options: 'i'
}),
}).orderBy("hot", "desc")
.orderBy("createtime", "desc")
.get()
default:
break
}
}
-----------------------------------