Regex 在不带正则表达式的MongoDB中将十进制字符串匹配为0
我有一个MongoDB集合,其中十进制数存储为Regex 在不带正则表达式的MongoDB中将十进制字符串匹配为0,regex,string,mongodb,decimal,Regex,String,Mongodb,Decimal,我有一个MongoDB集合,其中十进制数存储为string。我需要找到所有那些有这样一个字段的项目,quantity,等于0。因此,在查找0时,我实际上是在查找字符串: "0" "0.0" "0.00" 。。。 等等 我尝试使用$toInt如下 db.MyCollection.find({$toInt(Product.Quantity): 0}) 但是查询被标记为错误,它甚至不会被执行 经过一番挖掘,我终于找到了使用正则表达式的解
string
。我需要找到所有那些有这样一个字段的项目,quantity
,等于0
。因此,在查找0
时,我实际上是在查找字符串:
"0"
"0.0"
"0.00"
。。。
等等
我尝试使用$toInt
如下
db.MyCollection.find({$toInt(Product.Quantity): 0})
但是查询被标记为错误,它甚至不会被执行
经过一番挖掘,我终于找到了使用正则表达式的解决方案:
db.MyCollection.find({"Product.Quantity": {$regex: "^0+$|^0+(\.0+)"}})
这确实有效,但我相信有一个更直接的解决方案,它不可能如此复杂。有谁有更好的解决方案吗?这有帮助吗
只需将键
替换为您的字段即可
您可以看到它是如何在引擎盖下工作的
或者使用find
db.collection.find({
$expr: {
$eq: [
{
"$convert": {
"input": "$key",
"to": "double",
"onError": "$key",
"onNull": "$key"
}
},
0
]
}
})
这有用吗
只需将键
替换为您的字段即可
您可以看到它是如何在引擎盖下工作的
或者使用find
db.collection.find({
$expr: {
$eq: [
{
"$convert": {
"input": "$key",
"to": "double",
"onError": "$key",
"onNull": "$key"
}
},
0
]
}
})
是的,正则表达式可以方便地搜索字符串格式的数字。您可以稍微简化正则表达式:
db.MyCollection.find({“Product.Quantity”){$regex:“^0(\.0+?$”}})
正则表达式的解释:
<代码>$-在开头和结尾锚定^
-预期为0
0
-后跟可选的(\.0+)
,.0
,等等.00
db.MyCollection.find({“Product.Quantity”){$regex:“^0(\.0+?$”}})
正则表达式的解释:
<代码>$-在开头和结尾锚定^
-预期为0
0
-后跟可选的(\.0+)
,.0
,等等.00