小程序 | 云数据库模糊查询
发表时间:2022-7-26
发布人:葵宇科技
浏览次数:84
本文介绍如何在小程序的云数据库中实现模糊查询。
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
}
}
-----------------------------------