mongodb - $match 下的正则表达式不会产生结果
问题描述
我正在使用这个查询:
db.getCollection('fuelings').aggregate([
{
$match: {
"dateCreated" : {$gte: "2020-08-12T00:00:00.000Z" ,$lt: "2020-08-22T12:00:00.000Z"}
}
}] )
如您所见,这确实产生了结果:
但现在我想在 中添加另一个过滤器$match
,它过滤所有"status" ( from line #9) is a digit
. 所以我使用了正则表达式:
所以我添加了这个:
$match: { "status":/\d/ ,....
但现在它产生 0 个结果:
问题:
为什么会这样? \d
是一个数字正则表达式。为什么它不产生结果?
解决方案
有几件事不见了。
因此,您可以在匹配之前使用转换为字符串toString
。
db.collection.aggregate([
{
$match: {
$expr: {
"$regexFind": {
"input": {
$toString: "$key"
},
"regex": "\\d"
}
}
}
}
])
- 对于 4.2 之前的版本 - 使用
regex
db.collection.aggregate([{
$project:{
key:{
$toString:
"$key"}
}
},
{
$match: {
"key": {
"$regex": "\\d"
}
}
}
])
推荐阅读
- php - php减少多数组的值
- python - 在 beautifulsoup4 中,当纯粹基于元素和其中的文本抓取网站时,如何返回多个结果?
- css - Outlook 电子邮件:使用 CSS 隐藏空标签
- regex - 如何在 powershell 中指定特定的文件名?
- python - 如何传递参数来修改带有参数的函数的装饰器
- arduino - Arduino Loop 无法识别中断条件?
- ios - 如何设置 Xamarin iOS SDK 版本以在 Azure Devops 上构建
- python - MITM Proxy - 通过 python 脚本拦截和修改 https 内容
- powershell - 修改 Powershell 4.0 中的本地用户属性描述
- c++ - 链接 .lib 和 .h 文件 (OpenJDK 1.8)