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

Я использую следующий код для вычисления среднего и стандартного отклонения поля с именем «b» в моей коллекции.

db.ctg.aggregate(
   [
     {
       $group:
         {
           _id: "b",           
           avg: { $avg: "$b" },
           stdev: { $stdDevPop: "$b" }
         }
     }
   ]
)

Результат:

{ "_id" : "b", "avg" : 878.4397930385701, "stdev" : 893.8744489449962 }

Мне нужно добавить количество не пропущенных элементов "b" к моему результату, чтобы оно выглядело так:

{ "_id" : "b", "avg" : 878.4397930385701, "stdev" : 893.8744489449962, "nonmissing": 2126 }

Как я могу сделать это в запросе выше?

1 Ответ

1 голос
/ 28 января 2020

Результат $ avg & $ stdDevPop не изменяется даже после удаления документов, где b не существует ($avg игнорирует все документы, где поле не является -номер / отсутствует), поэтому вы можете попробовать запрос ниже.

Запрос:

db.ctg.aggregate([
        { $match: { b: { $exists: true } } },
        {
            $group:
            {
                _id: "b",
                avg: { $avg: "$b" },
                stdev: { $stdDevPop: "$b" },
                nonMissing: { $sum: 1 }
            }
        }
    ])
...