MongoDB подсчитывает поля с условием - PullRequest
1 голос
/ 17 апреля 2020

в моей коллекции у меня есть документ, который содержит следующий массив (simplefied):

 notifications: [
    {
       message: "i am an message",
       readed: false
    },
    {
       message: "i am an message",
       readed: false
    },
    {
       message: "i am an message",
       readed: true
    },
    {
       message: "i am an message",
       readed: true
    }
 ]

Я хочу подсчитать все поля с readed:false, так что это мой ожидаемый результат:

{
   unreaded_messages: 2
}

Я попытался добавить поле и отобразить массив уведомлений и добавить все непрочитанные элементы. после этого я хотел получить размер с $size, поэтому я получил номер. Но это не сработало так, как я ожидал.

{
$addFields: {
  unreaded_messages: {
    $map: {
      input: "$notification",
      in: {
        check: {
          $eq: [
            "$$this.readed",
            false
          ]
        }
      }
    }
  }
}
}

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать ниже агрегации

{
  "$addFields": {
    "unreaded_messages": {
      "$size": {
        "$filter": {
          "input": "$notification",
          "cond": {
            "$eq": ["$$this.readed", false]
          }
        }
      }
    }
  }
}
...