【问题标题】:Divide by zero generates an error on mongodb aggregation除以零会在 mongodb 聚合上产生错误
【发布时间】:2019-02-20 17:38:59
【问题描述】:

我有一个这样的数据集:

{
    "_id" : ObjectId("5c35f04c4e92b8337885d9a6"),
    "activity" : {
        "a1": 10,
        "a2": 11,
        "a3": 12,
        "a4": 13,
        "a5": 14,
        "b1": 5,
        "b2": 6
    }
}

注意:这是一个虚拟条目,30 个中的实际条目大约有 50 或 60 个来自简单的加法(如从 a1 到 a5),20 个条目用于比率(如 b1和 b2)。 为了问这个概念,我最小化了数据集

现在从 a1 到 a5 我必须用一些乘法的权重值做加法,如下所示: 假设乘法值为 0.5

so it will be like this:
(a1*0.5 + a2*0.5 + a3*0.5 + a4*0.5 + a5*0.5)

然后我必须取 b1 和 b2 的比率,然后乘以这样的权重

((b1:b2)*0.5)

所以最终的计算会是这样的:

(a1*0.5 + a2*0.5 + a3*0.5 + a4*0.5 + a5*0.5 + (b1:b2)*0.5)

为此,我使用了 mongodb 聚合。我的代码是这样的:

db.Collection.aggregate([
  { $match: { _id: ObjectId("5c35f04c4e92b8337885d9a6") } },
  { $unwind: "$_id" },
  {
    $project: {
      "activity.score": {
        $add: [
          {
            $multiply: [
              "$activity.a1",
              0.5
            ]
          },
          {
            $multiply: [
              "$activity.a2",
              0.5
            ]
          },
          {
            $multiply: [
              "$activity.a3",
              0.5
            ]
          },
          {
            $multiply: [
              "$activity.a4",
              0.5
            ]
          },
          {
            $multiply: [
              "$activity.a5",
              0.5
            ]
          },
          {
            $multiply: [
              {
                $divide: [
                  "$activity.b1",
                  "$activity.b2"
                ]
              },
              0.5
            ]
          }

        ]
      }
    }
  }
])
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  });

由此我得到了答案,但万一我的 b2 会像这样为 0:

{
    "_id" : ObjectId("5c35f04c4e92b8337885d9a6"),
    "activity" : {
        "a1": 10,
        "a2": 11,
        "a3": 12,
        "a4": 13,
        "a5": 14,
        "b1": 5,
        "b2": 0
    }
}

MongoDB 生成错误,即 MongoError: can't $divide by zero。 有没有人可以建议我如何实现这一目标。对此,任何帮助或建议都非常重要。提前感谢您的努力和互动。

【问题讨论】:

  • 所以你问如果你的b2实际上是0,如何解决divide by zero error
  • @molamk 完全一样
  • 你不能用那个公式做到这一点
  • 它会产生我提到的错误
  • 我的意思是你无法解决这个问题,因为你的b2 可能等于0。您需要更改公式或将b2 的值限制为永远不等于0

标签: mongodb aggregation-framework


【解决方案1】:

试试这个吧!

{
  "activity.score": {
    $add: [
      {
        $multiply: [
          "$activity.a1",
          0.5
        ]
      },
      {
        $multiply: [
          "$activity.a2",
          0.5
        ]
      },
      {
        $multiply: [
          "$activity.a3",
          0.5
        ]
      },
      {
        $multiply: [
          "$activity.a4",
          0.5
        ]
      },
      {
        $multiply: [
          "$activity.a5",
          0.5
        ]
      },
      {
        $multiply: [
         { $cond: [ { $eq: [ "$activity.b2", 0 ] }, 0,  {
            $divide: [
              "$activity.b1",
              "$activity.b2"
            ]
          }
       ] }
         ,
          0.5
        ]
      }
    ]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多