2017-08-03 53 views
0

嗨我試圖找到一個類似於mongodb數據庫中的變量的值。 雖然我沒有得到任何結果,但我不確定我做錯了什麼。如果我的用戶名只是d,那麼我應該看到一些名字中有d的用戶,但我不知道。試圖找到像mongodb這樣的值

//Find a user 
router.get('/findUser/:username', function (req, res) { 
    var user = req.params.username; 
    var db = req.db; 
    var collection = db.get('userlist'); 
    collection.find({'username': '/^' + user + '/' }, {}, function (e, docs) { 
    res.json(docs); 
    }); 
}); 

回答

1

插入符號標誌^手段:文本的開端。如果你擺脫了這一點,你有一個適當的「包含」查詢,如果這是你所期望的。

此外,您可能要添加,以使查詢不區分大小寫的第二斜線後的「i」:

你要知道,我不認爲'/'基於語法的協同工作與一個變量(你的案例中的user)。所以,試試這個來代替:

collection.find({'username':{'$regex' : user, '$options' : 'i'}}) 

一定要看看這個蘇答案,太:

https://stackoverflow.com/a/33971033/6440033

+0

謝謝,這很有道理 – maximdj

1

With /^d/(no quotes)you can create RegExp in JavaScript。在你的例子中,你使用了引號,因此創建了一個普通的字符串而不是RegExp。如果你想在你的正則表達式使用一個變量,你必須使用RegExp構造:

var userRegex = new RegExp('^' + user); 
collection.find({'username': userRegex}, function (e, docs) { 
    res.json(docs); 
    }); 

另見mongo js docs

+0

正如@dnickless指出的那樣,如果你想要一個「包含」,你也可以省略脫字符。如果您需要不區分大小寫的搜索,請添加'i'標誌:'new RegExp(user,'i');' –

0

我用這個和它似乎工作:

router.get('/findUser/:username', function (req, res) { 


var user = req.params.username; 
var reg = new RegExp(user, 'i') 
var db = req.db; 
var collection = db.get('userlist'); 
collection.find({ 'username': { $regex: reg }}, function (e, docs) { 
res.json(docs); 
}); 

} );

+0

您不需要同時執行這兩個操作。使用options參數的$ regex語法,或者創建正則表達式,並像'{'username':reg}'一樣使用它。查看我發佈在「查詢中的正則表達式」下的文檔鏈接 –