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

问题描述:

IM建立一个网站,使用的NodeJS,expressjs,MongoDB的,猫鼬,身体解析器和等。搜索查询中使用正则表达式

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

我在堆栈溢出中发现了一个解决方案,并在我的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文件中的正则表达式之前,我需要做些什么?

谢谢你!

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

还阅读文档:

+1

@WiktorStribiżew'thename'是一个变量,我觉得这是最主要的问题。 – robertklep

可以$options:'i"

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

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

它有像一些不错的功能:$nin$options: 'six'

+0

它的工作原理!你能告诉我这里发生了什么吗?谢谢!!! – John

+0

@John我认为你的查询是:^ something $这意味着:开始与结束。所以它和{firstname:'something'}是一样的,但是在Shaishab的回答中,他只是定义了一个模式,它的作用如下:LIKE'%something%'操作符在mysql – num8er

+0

@ num8er中,好酷,谢谢兄弟。但你能告诉我什么更有效吗? shaishabs回答还是chridam回答? chridam答案也可以。 – John

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

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

它也适用于兄弟!谢谢! – John