查询猫鼬用$ regex不返回结果

时间:2018-11-06 17:10:45

标签: javascript regex mongodb mongoose mongodb-query

尝试使用正则表达式构建猫鼬查询,但由于某种原因,它始终返回零结果。

我有一个名为Place的模型,其值是wind_direction。 wind_direction是一个字符串,看起来像这样:

place.wind_direction = "SW, WSW, W, WNW, NW, NE, ENE, E";

我通过一种形式(在这种情况下为“ W,WNW,NW”)获取值,并尝试构建这样的正则表达式:

var string = JSON.stringify(req.body.wind_direction)
string = string.replace(/[\[\]"]+/g,'').split(",")
var reg = ""
for(var i = 0; i < string.length; i++){
   reg += "\b" + string[i] + "\b|";
}
reg = "/" + reg.substring(0, reg.length - 1) + "/";
query.wind_direction = { "$regex": reg, "$options": "i" }

当我在console.log中查询时,它看起来像这样:

{ wind_direction: { '$regex': '/\bW\b|\bWNW\b|\bNW\b/', '$options': 'i' } }

然后,当我使用Place.find(query,function(req,res ...)运行简单查询时,它不会返回任何结果。但是,当我在在线正则表达式测试器中测试正则表达式时,它会起作用。

1 个答案:

答案 0 :(得分:2)

看来,您的req.body.wind_direction已经是一个可用于构建替换模式的数组,无需JSON.stringify该数组。要建立替代,您可以使用arr.join("|")

为了避免重复\b,您可以将所有替代项归为一组,并且non-capturing group最适合这里:\b(?:term1|term2|termN)\b

您可以使用

query.wind_direction = { "$regex": new RegExp("\\b(?:" + req.body.wind_direction.join("|") + ")\\b"), "$options": "i" }