Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
如何修复“无法识别的表达式$round”,同时使用mongodb$和带有$lookup的条件将其应用于管道中存储的数据_Mongodb_Match_Rounding_Expr - Fatal编程技术网

如何修复“无法识别的表达式$round”,同时使用mongodb$和带有$lookup的条件将其应用于管道中存储的数据

如何修复“无法识别的表达式$round”,同时使用mongodb$和带有$lookup的条件将其应用于管道中存储的数据,mongodb,match,rounding,expr,Mongodb,Match,Rounding,Expr,在使用Angular 7在浏览器中查看时,我对来自DB的数据应用了精度。 前端:角度7 后端:Java和Mongodb 前精度(db):100.9999 小数点后对用户可见的精度后:101.00 UI上有一个搜索功能,用户可以在其中写入任何金额范围。 情景1: 用户输入:100到100 结果:未找到预期的记录 情景2: 用户输入:101至101 结果:未找到任何记录根据user101应已找到1条记录,但由于实际值为100.9999,因此不会返回任何记录 解决方案是,我尝试在查询中应用搜索条件之前

在使用Angular 7在浏览器中查看时,我对来自DB的数据应用了精度。 前端:角度7 后端:Java和Mongodb

前精度(db):100.9999 小数点后对用户可见的精度后:101.00

UI上有一个搜索功能,用户可以在其中写入任何金额范围。 情景1: 用户输入:100到100 结果:未找到预期的记录

情景2: 用户输入:101至101 结果:未找到任何记录根据user101应已找到1条记录,但由于实际值为100.9999,因此不会返回任何记录

解决方案是,我尝试在查询中应用搜索条件之前应用精度。 解决方案之前的代码:

SQL等价物为:

在$and和$gte/$lte下使用$round时,出现以下错误

谁能告诉我,我做错了什么,我该怎么做


注意:我在查询中也使用了$lookup,这可能是它无法识别$round的原因

我看到的原因之一是您使用的mongodb版本不支持$round操作符$在版本4.2中引入了舍入运算符。。。及以上。 据我所知


升级您的mongodb版本并重试。

您说得对,我刚刚验证过,我使用的是4.0.6。愚蠢的错误。谢谢你的快速回复。有没有其他方法来完成我在这里试图实现的目标?我认为这是可以做到的,因为循环逻辑如下。将值加1/2,取结果的下限并将其转换为整数。您的查询将变为圆形,而不是圆形。您可以使用$floor:{$add:[$amount,0.5]}$floor是在3.2中引入的,因此您可以安全地使用它,但它不会保留小数点后的数字。例如,如果我们选择精度为2:100.9999+0.5=101.4999-结果101Fine,但对于100.12+0.5=100.62-结果100-以及100.12ohh中的期望值。。。让我看看能不能给你买点东西。但不幸的是,我不能100%确定我是否能得到这个问题的答案。$floor:{$add:[$amount,0.5]}在4.0.16中适用于我
 "$pipeline": [{
        "$match": {
            "$expr": {
               "$and": [{
                          "$eq": ["$column1", "$valueForColumn1"]
                        },
                        {
                          "$gte": ["$amount", "$minValue"]
                        },
                        {
                          "$lte": ["$amount", "$maxValue"]
                        }]
                      }
                    }
                  }]
Select * from table_name where minVale >= ROUND(amount) <= maxValue;
  "$pipeline": [{
        "$match": {
            "$expr": {
               "$and": [{
                          "$eq": ["$column1", "$valueForColumn1"]
                        },
                        {
                          "$gte": [{"$round": ["$amount", 2]}, "$minValue"]
                        },
                        {
                          "$lte": [{"$round": ["$amount", 2]}, "$maxValue"]
                        }]
                      }
                    }
                  }]
Assert: command failed {
    ok: 0,
    errmsg: Unrecognised expression "$round"
    code: 168
    codeName: InvalidPipeline Operator