Запрос MongoDB для возврата количества записей в трех разных группах - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать запрос mongoDB, который вернет общее количество элементов в трех разных группах. База данных относится к пассажирам titani c с задачей вернуть общее количество людей в возрасте до 18 лет, которые не выжили, с разбивкой по классу, в котором они находились. Результат, который я ищу, должен выглядеть примерно так:

{"_id" : {"Class" : 3, "Survived" : "No", "Total" : 18}}
{"_id" : {"Class" : 2, "Survived" : "No", "Total" : 23}}
{"_id" : {"Class" : 1, "Survived" : "No", "Total" : 12}}

Это то, что у меня есть до сих пор:

db.passangers.aggregate([
  {
    "$match": {"Age": {$lt: 18},"Survived": "No"}
  },
  {
    "$group": {
      _id: {Class: "$Pclass", Survived: "$Survived"}}
  },
  { $count: "Survived"},
  {
    "$sort": {"Pclass": -1}
  }
])

, но он, кажется, выводит только:

{"Survived" : 17}

Извините, если я не предоставил достаточно информации, но Буду признателен за помощь!

1 Ответ

0 голосов
/ 27 мая 2020

Добро пожаловать в SO. Проблема с вашим запросом заключается в том, что вы создаете группы без подсчета количества элементов в каждой группе. Итак, когда вы посчитаете их позже, он вернет 17, что является количеством различных значений в Pclass. Вы ищете следующий запрос:

db.passangers.aggregate([   
  {  
    "$match": {"Age": {$lt: 18},"Survived": "No"} 
  },
  {    
    "$group": { 
      _id: {Class: "$Pclass", Survived: "$Survived"},  Total: {$sum:1}}
  },
  { 
    "$sort": {"Pclass": -1}
  }
])

Вы получите:

{ "_id" : { "Class" : 3, "Survived" : "No" }, "Total" : 18 }
{ "_id" : { "Class" : 2, "Survived" : "No" }, "Total" : 23 }
{ "_id" : { "Class" : 1, "Survived" : "No" }, "Total" : 12 }
...