2017-08-03 29 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}'一样使用它。查看我发布在“查询中的正则表达式”下的文档链接 –