Как использовать $ group и $ cond вместе в агрегации MongoDB? - PullRequest
1 голос
/ 10 июля 2019

У меня есть коллекция, как показано ниже.

{
    "userId" : "1",
    "feedbackGiven" : true
}
{
    "userId" : "1",
    "feedbackGiven" : false
}
{
    "userId" : "1",
    "feedbackGiven" : true
}
{
    "userId" : "2",
    "feedbackGiven" : false
}
{
    "userId" : "2",
    "feedbackGiven" : true
}

Мне нужно сгруппировать ее по userId и получить два значения, как count of totalGivenFeedback и количество ложных FeedbackGiven.

Я пробовал запрос ниже.

db.collection.aggregate([
{
      $group: { _id: "$userId", feedbackGiven: { $push : "$feedbackGiven"} }
}
])

Это дает результаты, как показано ниже.

{
    "_id" : "1",
    "feedbackGiven" : [ 
        true, 
        false,
        true
    ]
}
{
    "_id" : "2",
    "feedbackGiven" : [ 
        false,
        true
    ]
}

Я могу получить общее количество отзывов и ложных отзывов, используя приведенные выше результаты из моего кода JavaScript.

Но мой вопрос, есть ли способ получить его, используя запрос MongoDB.

Я ожидаю результатов, как показано ниже.

{
    "_id" : "1",
    "totalFeedbackGive" : 3,
    "falseFeedbackCount" : 1
}
{
    "_id" : "2",
    "totalFeedbackGive" : 1,
    "falseFeedbackCount" : 1
}

Может кто-нибудь дать мне решение?

1 Ответ

1 голос
/ 10 июля 2019

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

db.collection.aggregate([
  { "$group": {
    "_id": "$userId",
    "totalFeedbackGive": { "$sum": 1 },
    "falseFeedbackCount": {
      "$sum": {
        "$cond": [
          { "$eq": ["$feedbackGiven", false] },
          1,
          0
        ]
      }
    }
  }}
])

Так что вам нужно использовать $sum аккумулятор для подсчета количества документов после подачи $group этап.

И второй необходимо использовать $sum аккумулятор $cond для подсчета количества документов для falseFeedback счета

...