使用带有正则表达式的变量来查找mongodb中的数据(Meteor app)

时间:2015-10-31 19:59:02

标签: regex mongodb meteor

我需要从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();

提前致谢。

3 个答案:

答案 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();