這是今天手頭項目中遇到的一個問題,關於mongoose
如何實現相似於SQL中 nick LIKE '%keyword%' or email LIKE '%keyword%'
這種多條件模糊搜索的問題。 查閱了mongoose文檔才得以實現,特此記錄一下。javascript
主要用到了query.$or
和query.$regex
這兩個find
參數。html
其中query.$or
用於實現多條件查詢,其值是一個數組。相關文檔java
示例代碼:node
query.or([{ color: 'red' }, { status: 'emergency' }])
query.$regex
用於實現模糊查詢。相關文檔api
示例代碼:數組
{ <field>: { $regex: /pattern/, $options: '<options>' } } { <field>: /pattern/<options> }
經過以上兩個參數就能夠實現多條件模糊查詢了。以User表爲例,經過輸入一個關鍵字,來匹配暱稱或者郵箱與關鍵字相近的記錄。mongoose
示例代碼:this
const keyword = this.params.keyword //從URL中傳來的 keyword參數 const reg = new RegExp(keyword, 'i') //不區分大小寫 const result = yield User.find( { $or : [ //多條件,數組 {nick : {$regex : reg}}, {email : {$regex : reg}} ] }, { password : 0 }, { sort : { _id : -1 }, limit : 100 } )