小程式 | 雲資料庫模糊查詢

語言: CN / TW / HK

本文介紹如何在小程式的雲資料庫中實現模糊查詢。

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