Деление на ноль генерирует ошибку при агрегации mongodb - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть такой набор данных:

{
    "_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 голосов
/ 20 февраля 2019

Попробуйте с этим это работает!

{
  "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
        ]
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...