除以零会在mongodb聚合上产生错误

时间:2019-02-20 08:08:03

标签: mongodb aggregation-framework

我有一个像这样的数据集:

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

注意::这是一个虚拟条目,实际条目约为50或60,其中30个来自简单加法(如从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:不能$除以零。 有谁可以建议我如何实现这一目标。任何帮助或建议都非常可取。预先感谢您的努力和互动。

1 个答案:

答案 0 :(得分:0)

尝试使用它!

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