使用正则表达式在mongodb中搜索查询

时间:2016-09-21 10:56:45

标签: regex node.js mongodb mongoose

使用nodejs,expressjs,mongodb,mongoose,body-parser等构建网站。

基本上我已经创建了一个搜索功能,你可以在其中搜索用户,基本上它可以工作,但问题是,它区分大小写,我想使用不区分大小写搜索用户。

我在堆栈溢出中找到了一个解决方案,并在我的mongo shell上尝试了它。这是命令

    db.loginusers.find({
    $or: 
    [

        {"firstname": {$regex: /^PIa$/i}}, 
        {"lastname": {$regex: /^NAtUrE$/i}}

    ]
})

这适用于mongoshell。所以当我尝试把它放在我的JS文件上时,

app.post("/searchresult", function(req, res){
    var thename = req.body.thename;
    LoginUser.find({
        $or: [

            {"firstname": {$regex: /^thename$/i}},
            {"lastname": {$regex: /^thename$/i}}
        ]
    }, function(err, searchedUser){
        if(err){
            console.log(err);
            res.redirect("back");
        } else {
            res.render("searchprofile", {foundUser: searchedUser});
        }
    });
});

它无法正常工作,尽管我试图将正确的案例放在名称不起作用的地方。

我的问题是,在我的JS文件上使用正则表达式之前,我是否需要做一些事情?

感谢你!

2 个答案:

答案 0 :(得分:2)

可以使用getExternalFilesDirs

进行尝试
$options:'i"

或:

LoginUser.find({
  $or: [
    {'firstname': {$options:'i', $regex: 'PIa'}}, 
    {'lastname':  {$options:'i', $regex: 'NAtUrE'}}
  ]
})

还阅读了文档:https://docs.mongodb.com/manual/reference/operator/query/regex/

它有一些不错的功能,例如:LoginUser.find({ $or: [ {'firstname': {$regex: /PIa/i}}, {'lastname': {$regex: /NAtUrE/i}} ] }) $nin

答案 1 :(得分:2)

因为thename是一个变量,所以使用RegExp对象构造函数从变量创建一个正则表达式实例,然后在查询中使用该实例:

var rgx = new RegExp("^"+ thename +"$", "i");
LoginUser.find({
    "$or": [
        {"firstname": rgx },
        {"lastname": rgx }
    ]
}, callback);