2016-09-21 77 views
0

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

回答

2

可以$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

2

因爲thename是一個變量,使用RegExp對象構造函數來創建一個正則表達式實例關閉變量,然後可以在查詢中使用如:

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

它也適用於兄弟!謝謝! – John