mongoose模糊查询

Posted 992516410zhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoose模糊查询相关的知识,希望对你有一定的参考价值。

主要用到了query.$or和query.$regex这两个find参数。

其中query.$or用于实现多条件查询,其值是一个数组。

示例代码:

query.or([{ color: ‘red‘ }, { status: ‘emergency‘ }])
query.$regex用于实现模糊查询。相关文档

示例代码:

{ <field>: { $regex: /pattern/, $options: ‘<options>‘ } }
{ <field>: { $regex: ‘pattern‘, $options: ‘<options>‘ } }
{ <field>: { $regex: /pattern/<options> } }

通过以上两个参数就可以实现多条件模糊查询了。以User表为例,通过输入一个关键字,来匹配昵称或者邮箱与关键字相近的记录。

示例代码:

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 },// 按照 _id倒序排列
        limit : 100 // 查询100条
    }
)

实例代码

 var local = require(‘./models/local‘)

 app.get(‘/local/repeat‘, function (req, res) {
 var keyword = req.query.keyword // 获取查询的字段

 var _filter={
    $or: [  // 多字段同时匹配
      {cn: {$regex: keyword}},
      {key: {$regex: keyword, $options: ‘$i‘}}, //  $options: ‘$i‘ 忽略大小写
      {en: {$regex: keyword, $options: ‘$i‘}}
    ]
  }
  var count = 0
  local.count(_filter, function (err, doc) { // 查询总条数(用于分页)
    if (err) {
      console.log(err)
    } else {
      count = doc
    }
  })

  local.find(_filter).limit(10) // 最多显示10条
    .sort({‘_id‘: -1}) // 倒序
    .exec(function (err, doc) { // 回调
      if (err) {
        console.log(err)
      } else {
        res.json({code: 0, data: doc, count: count})
      }
    })
})

以上是关于mongoose模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

mybatis模糊查询

koa mongoose 实践篇

基于mongodb的搜索分页

javascript [猫鼬片段]猫鼬#mongoose的提示

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

mybatis模糊查询防止SQL注入