这是今天手头项目中遇到的一个问题,关于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 } )