javascript - 使用 $regex 查询 mongoose 不返回任何结果
问题描述
尝试使用正则表达式构建猫鼬查询,但由于某种原因,它总是返回零结果。
我有一个名为 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...
解决方案
看来您req.body.wind_direction
已经是一个可以用来构建交替模式的数组,不需要JSON.stringify
这个数组。要构建替代,您可以使用arr.join("|")
.
为了避免重复\b
,您可以将所有备选方案分组,非捕获组最适合:\b(?:term1|term2|termN)\b
.
您可以使用
query.wind_direction = { "$regex": new RegExp("\\b(?:" + req.body.wind_direction.join("|") + ")\\b"), "$options": "i" }
推荐阅读
- c# - 如何在类对象中获取具有类成员的类对象
- azure - 如何减少通知中心的活动设备注册计数
- html - 如何使 HTML 中的任何元素居中
- java - 如何从excel中获取重复记录并使用java写入新文件
- spring - Spring Boot 安全性 - 执行器
- android - 如何在 Android SDK 26 或更高版本上以编程方式重置锁屏密码
- c++ - Is it safe to store the pointer to the data of a std::string?
- go - 模拟外部库进行单元测试
- python - 使用 OpenCV 混合多个图像
- python-3.x - 在特定情况下,排序函数 sort() 无法按预期工作