如何使用mongodb修复"无法识别的表达式$round"$and条件与$lookup



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

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

UI上有一个搜索功能,用户可以在其中写入任何金额范围。
场景 1用户输入t:
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"的原因。

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

升级您的 mongodb 版本并尝试。

相关内容

  • 没有找到相关文章

最新更新