如何修复“无法识别的表达式$round”,同时使用mongodb$和带有$lookup的条件将其应用于管道中存储的数据
在使用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时,出现以下错误 谁能告诉我,我做错了什么,我该怎么做如何修复“无法识别的表达式$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,因此不会返回任何记录 解决方案是,我尝试在查询中应用搜索条件之前
注意:我在查询中也使用了$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