本文介绍如何在小程序的云数据库中实现模糊查询。

1. 官方方案

构造正则表达式,仅需在普通 js 正则表达式无法满足的情况下使用

options 参数说明:

options 支持 i, m, s 这三个 flag,注意 JavaScript 原生正则对象构造时仅支持其中的 i, m 两个 flag,因此需要使用到 s 这个 flag 时必须使用 db.RegExp 构造器构造正则对象。flag 的含义见下表:

flag说明
i大小写不敏感
m跨行匹配;让开始匹配符 ^ 或结束匹配符 $ 时除了匹配字符串的开头和结尾外,还匹配行的开头和结尾
s让 . 可以匹配包括换行符在内的所有字符
// 原生 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://blog.csdn.net/c0411034/article/details/100423386 
        // 官方文档: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
  }
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐