尝试使用正则表达式构建猫鼬查询,但由于某种原因,它始终返回零结果。
我有一个名为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 ...)运行简单查询时,它不会返回任何结果。但是,当我在在线正则表达式测试器中测试正则表达式时,它会起作用。
答案 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" }