Агрегация в запросе $group и $count должна пропускать значения null при возврате количества.

Вопрос или проблема

В приведённом ниже запросе первая агрегация даст значение null, после чего во втором этапе оно будет учтено как 1. Как можно исключить учёт null значения из уникальных?

db.party.aggregate([
{ $group: { _id: “$party1.partyRole” } },
{ $count: “count” }
]);

этап 1:
{ _id: “$party1.partyRole” } => _id: null

этап 2:
“count” => 1

Но на первом этапе, если есть только значение null, то подсчёт должен его пропустить и показать 0 вместо 1.

агрегационный этап

Ответ или решение

Ваша задача заключается в том, чтобы выполнить агрегацию в MongoDB, пропуская значения null при подсчете. Давайте разберем, как можно изменить ваш запрос, чтобы он не учитывал null значения.

Ваш оригинальный запрос:

db.party.aggregate([
  { $group: { _id: "$party1.partyRole" } },
  { $count: "count" }
]);

Проблема в том, что стадию $count следует применять только после фильтрации null значений. Чтобы сделать это, вы можете использовать стадию $match, чтобы исключить null значения перед тем, как применять $group. Таким образом, если в группе оказались только значения null, то count покажет 0 вместо 1.

Вот как может выглядеть обновленный запрос:

db.party.aggregate([
  { 
    $match: { 
      $expr: { $ne: ["$party1.partyRole", null] } // Исключаем null значения
    }
  },
  { 
    $group: { 
      _id: "$party1.partyRole" 
    } 
  },
  { 
    $count: "count" 
  }
]);

Описание изменений:

  1. Стадия $match: добавлена для фильтрации документов, где party1.partyRole не равен null.
  2. Стадия $group: теперь будет применяться только к ненулевым значениям, что исключит проблемы подсчета.
  3. Стадия $count: будет подсчитывать только те документы, которые прошли предшествующую стадию фильтрации.

Таким образом, если в коллекции party были только записи с null в поле party1.partyRole, ваш итоговый счет покажет 0, как вы и хотели.

Это позволит более точно учитывать количество уникальных значений роли партии, пропуская null, что лучше соответствует реальным потребностям вашего анализа данных.

Оцените материал
Добавить комментарий

Капча загружается...