Mongodb和mongoose模糊查询

需求说明:在mongdb中使用模糊查询,就像sql中的like查询,在where条件中使用模糊匹配,当然最重要的是需要模糊查询的字符串是动态传入的

以一篇文章为例,content字段为文章内容,我们要查询文章内容中包含Nodejs关键字的文章

mongodb中查询

select * from articles where content like '%Nodejs%';
db.articles.find( { content: /Nodejs/i } )
Article.find({ content: /Nodejs/i}, function (err, docs) {});

这种写法是一种简写操作,需要注意的是不能带双引号,带了双引号就成了字符串。但是这种写法是用/包裹了一个字符串类型的关键字,在实际程序是动态传入的,比如:

var a="Nodejs" ;
Article.find({ content: /a/i}, function (err, docs) {});

此时会把"a"当做要查询的关键字而不是"Nodejs",所以这时还是需要用到完整的查询方式,就是使用$regex关键字,还有$options选项

var text = 'Nodejs';//动态传入的变量
Article.find({ content: { $regex: text, $options: 'i' }}, function (err, docs) {});

$options选项值:

  • i 大小写不敏感
  • m $regex包含正则^,$符号的表达式
  • x 忽略空格
  • s 允许逗点匹配所有字符串

其实$regex就是正则表达式的写法

查找数组中的字段:

contacts:{
    [
        {
            address: "address1",
            name: "张三"
        },
        {
            address: "address2",
            name: "李四"
        },
        .....
    ]
}

可以通过db.collection.find({'contacts.name':{$regex:'张'}})获得

参考文档:

https://docs.mongodb.com/manual/reference/operator/query/regex/