我需要从Mongodb获取数据,这取决于我正在搜索的内容。在接下来的两个例子中,它可以正常工作:
//示例1;
var variable = "car"; Items.find({"description": variable}).fetch();
//示例2;
Items.find({"description": /.*car.*/}).fetch();
但是,当我想在MongoDB查询中将变量与regex结合使用时,它什么都不返回,我做错了什么:
Items.find({"description": /.*variable.*/}).fetch();
Items.find({"description": "/.*"+variable+".*/"}).fetch();
提前致谢。
答案 0 :(得分:17)
事实上。您可能没有意识到"/"
与/
不同,而后者没有连接的语义(如字符串的+
),因为我知道(但我可能是错的)。后一种语法是RegExp
类的内联/简写构造函数。这说明很容易修复,只需使用new RegExp
显式创建正则表达式。
但是,在您的情况下,我建议使用mongodb的$regex
构造:
Items.find({"description": {$regex: ".*" + variable + ".*"}}).fetch();
有关详细信息,请参阅documentation on $regex
。
答案 1 :(得分:3)
如果你需要它不区分大小写,那么你应该使用这样的正则表达式:
new RegExp(".*"+keyword+".*", "i")
答案 2 :(得分:0)
答案是搜索的每个关键字
Items.find({"description": {
'$regex': new RegExp(variable, "i")
}}).fetch();