Regex 使用正则表达式在mongodb中搜索查询
我正在建立一个网站,使用nodejs、expressjs、mongodb、mongoose、body解析器等 基本上我已经创建了一个搜索功能,在这里你可以搜索用户,基本上它可以工作,但问题是,它区分大小写,我想用不区分大小写的方法搜索用户 我在stack overflow中找到了一个解决方案,并在我的mongo shell上进行了尝试。这是命令Regex 使用正则表达式在mongodb中搜索查询,regex,node.js,mongodb,mongoose,Regex,Node.js,Mongodb,Mongoose,我正在建立一个网站,使用nodejs、expressjs、mongodb、mongoose、body解析器等 基本上我已经创建了一个搜索功能,在这里你可以搜索用户,基本上它可以工作,但问题是,它区分大小写,我想用不区分大小写的方法搜索用户 我在stack overflow中找到了一个解决方案,并在我的mongo shell上进行了尝试。这是命令 db.loginusers.find({ $or: [ {"firstname": {$regex: /^P
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文件上使用正则表达式之前,我需要做些什么吗
谢谢大家! 可以使用
$options:'i'
或:
也可以阅读文档:
它有一些很好的功能,比如:
$nin
,$options:'six'
可以用$options:'i'
或:
也可以阅读文档:
它有一些很好的特性,比如:
$nin
,$options:'six'
因为名称是一个变量,所以使用对象构造函数在变量之外创建一个regex实例,然后可以在查询中使用该实例:
var rgx = new RegExp("^"+ thename +"$", "i");
LoginUser.find({
"$or": [
{"firstname": rgx },
{"lastname": rgx }
]
}, callback);
由于名称是一个变量,请使用对象构造函数在变量之外创建一个正则表达式实例,然后在查询中使用该实例,如下所示:
var rgx = new RegExp("^"+ thename +"$", "i");
LoginUser.find({
"$or": [
{"firstname": rgx },
{"lastname": rgx }
]
}, callback);
@WiktorStribiżewthename
是一个变量,我认为这是主要问题。@WiktorStribiżewthename
是一个变量,我认为这是主要问题。@John我认为您的查询是:^something$,它的意思是:以开头,以结尾。所以它和{firstname:'something'}一样,但在Shaishab的回答中,他只是定义了一个模式,该模式的工作方式是:像中的“%something%”操作符mysql@num8er好的,很酷,谢谢兄弟。但是你能告诉我什么更有效率吗?Shaishab回答还是chridam回答?chridam的答案也很有效。@num8er描述了它。也可以使用类似的:$regex:/PIa/i
来代替应该有效的/^PIa$/i
。@John这两个想法是一样的。一个使用regexp对象,另一个使用mongodb的regex语法和option。但我更喜欢Shaishab的答案,因为我不喜欢在代码和消费中创建额外的元素memory@num8erRegExp
是必需的,因为它允许变量用作regex模式。上面的答案假设静态模式/PIa/
和/NAtUrE/
,因此如果给定一个可变搜索模式,这将不起作用,而这正是OP的问题所在。@John我认为您的查询是:^something$,它的意思是:以开头,以结尾。所以它和{firstname:'something'}一样,但在Shaishab的回答中,他只是定义了一个模式,该模式的工作方式是:像中的“%something%”操作符mysql@num8er好的,很酷,谢谢兄弟。但是你能告诉我什么更有效率吗?Shaishab回答还是chridam回答?chridam的答案也很有效。@num8er描述了它。也可以使用类似的:$regex:/PIa/i
来代替应该有效的/^PIa$/i
。@John这两个想法是一样的。一个使用regexp对象,另一个使用mongodb的regex语法和option。但我更喜欢Shaishab的答案,因为我不喜欢在代码和消费中创建额外的元素memory@num8erRegExp
是必需的,因为它允许变量用作regex模式。上面的答案假设静态模式/PIa/
和/NAtUrE/
,因此在给定可变搜索模式的情况下,这是OP的问题所在。
var rgx = new RegExp("^"+ thename +"$", "i");
LoginUser.find({
"$or": [
{"firstname": rgx },
{"lastname": rgx }
]
}, callback);