2

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

精度前(以 db 为单位): 100.9999
用户可见精度后(小数点后 2): 101.00

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

场景2:
用户输入: 101到101
结果:没有找到记录(根据user(101)应该找到1条记录,但由于实际值为100.9999,所以不会返回任何记录)

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

 "$pipeline": [{
        "$match": {
            "$expr": {
               "$and": [{
                          "$eq": ["$column1", "$valueForColumn1"]
                        },
                        {
                          "$gte": ["$amount", "$minValue"]
                        },
                        {
                          "$lte": ["$amount", "$maxValue"]
                        }]
                      }
                    }
                  }]

SQL 等价物是:

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"]
                        }]
                      }
                    }
                  }]

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


Assert: command failed {
    ok: 0,
    errmsg: Unrecognised expression "$round"
    code: 168
    codeName: InvalidPipeline Operator

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

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

4

1 回答 1

4

我可以看到的原因之一是您使用的 mongodb 版本不支持 $round 运算符。$round 运算符是在 4.2... 及更高版本中引入的。根据做Mongodb doc

升级您的 mongodb 版本并尝试。

于 2019-09-06T13:15:49.503 回答