Как найти количество пустых полей для всех ключей в документе в MongoDB? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть коллекция в Монго с несколькими полями, мне нужно узнать количество пустых значений для каждого поля во всех документах? Также мне нужно сделать это с помощью агрегационных конвейеров. Например, если моя коллекция будет такой:

{
   _id: 1,
   field1: 'value1',
   field2: 'value2',
   field3: null,
   field4: 'value3'
},
   _id: 2,
   field1: null,
   field2: 'value4',
   field3: null,
   field4: 'value5'
{
   _id: 3,
   field1: 'value7',
   field2: 'value8',
   field3: 'value9',
   field4: 'value10'
},
{
   _id: 4,
   field1: 'value11',
   field2: 'value12',
   field3: null,
   field4: 'value13'
}

Я хочу получить такой результат:

{ fieldName: 'field1', notNullCount: 3},  { fieldName: 'field2', notNullCount: 4}, { fieldName: 'field3', notNullCount: 1}, { fieldName: 'field4', notNullCount: 4}

Я пытался использовать проекцию и использовать условие для подсчета не нулевых значений, но в результате я получил один документ с fieldName в качестве ключа и подсчетом в качестве значения, но Мне нужно получить результат с одним документ для каждого поля, как мой пример выше.

(В случае, если вы хотите знать, зачем мне нужен такой результат, потому что мне нужно запустить запрос на Metabase и создать панели мониторинга, и он поддерживает только такие результаты)

1 Ответ

0 голосов
/ 16 июня 2019

Вы захотите использовать $group с _id: null, чтобы иметь возможность агрегировать по всем полям.

  { $group: {
      _id: null,
      field1: { $sum: {$cond: [{$eq: ["$field1", null]}, 0, 1] } },
      field2: { $sum: {$cond: [{$eq: ["$field1", null]}, 0, 1] } }
     }
  }

Получив эти документы, вы сможете $projectих в массив, который вы можете $unwind получить желаемый формат:

{ $project: { fields: [{ fieldName: "field1", count: "$field1" }, {fieldName: "field2", count: "$field2"}] } },
{ $unwind: "$fields" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...