首页 > 解决方案 > 是否可以在 mongodb 中列出其值小于另一个字段 10% 的元素列表?

问题描述

我基本上有一个数据库,用于记录摩托车及其行驶里程。

{
 "motorcycle":"A",
 "current_km":4600,
 "review_km":5000
},
{
 "motorcycle":"B",
 "current_km":4000,
 "review_km":5000
},
{
 "motorcycle":"C",
 "current_km":4900,
 "review_km":5000
},
{
 "motorcycle":"D",
  "current_km":3000,
  "review_km":5000
}

我有一个名为current_km确定您当前里程的字段,我还有另一个名为 的字段 review_km,它包含指定您的审核应该完成的里程,只要您当前的里程 ( current_km) 大于里程审核 ( review_km) 的 10%。

所以我想列出以下元素:

current_km大于:

( review_km- ( review_km* 0.10))

例如:

current_km = 4600;
review_km = 5000;
result = 5000 - (5000 * 0.10);
4600 (current_km)> = 4500 (result) // in this case it is showed

在我的数据库中,它将显示摩托车 A 和 C 的结果

我该怎么做?我不知道是否可以直接在mongodb中进行。

标签: mongodb

解决方案


需要与$subtractand一起使用聚合$multiply

  • $addFields添加新字段,我们正在生成result字段,方程(review_km - ( review_km * 0.10))使用$subtract$multiply
  • $match$expr如果公式current_km >= result正确,则返回文档
db.collection.aggregate([
  {
    $addFields: {
      result: {
        $subtract: [
          "$review_km",
          {
            $multiply: [
              "$review_km",
              0.10
            ]
          }
        ]
      }
    }
  },
  {
    $match: {
      $expr: {
        $gte: [
          "$current_km",
          "$result"
        ]
      }
    }
  }
])

工作游乐场:https ://mongoplayground.net/p/s2qenvuzLKF


较短的版本

如果您不希望result字段作为响应,则不再需要组合条件$match$addFields

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gte: [
          "$current_km",
          {
            $subtract: [
              "$review_km",
              {
                $multiply: [
                  "$review_km",
                  0.10
                ]
              }
            ]
          }
        ]
      }
    }
  }
])

工作游乐场:https ://mongoplayground.net/p/fii__3tTika


推荐阅读