Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在不带正则表达式的MongoDB中将十进制字符串匹配为0_Regex_String_Mongodb_Decimal - Fatal编程技术网

Regex 在不带正则表达式的MongoDB中将十进制字符串匹配为0

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}) 但是查询被标记为错误,它甚至不会被执行 经过一番挖掘,我终于找到了使用正则表达式的解

我有一个MongoDB集合,其中十进制数存储为
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
    ,等等

是的,它是有效的,我认为它可以通过简单的查找而不是使用aggregate@CiccioMiami当然,聚合/匹配和查找是等效的。更新:-)首先选择聚合的原因是它更强大,但在这里没有区别。是的,它可以工作,我认为它可以通过简单的查找而不是使用aggregate@CiccioMiami当然,聚合/匹配和查找是等效的。更新:-)首先选择聚合的原因是它更强大,但这里没有区别。