用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

小程序 | 云数据库模糊查询

Rolan 2022-1-10 00:47

本文介绍如何在小程序的云数据库中实现模糊查询。1. 官方方案官方文档 ​ ​官方文档​​构造正则表达式,仅需在普通 js 正则表达式无法满足的情况下使用options 参数说明:options 支持 i, m, s 这三个 flag,注意 J ...

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

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
  }
}

-----------------------------------

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: CnPeng_1 来自: 51cto