Получение результата $ group с количеством групп

Предполагая, что у меня есть коллекция под названием "сообщения» (на самом деле это более сложная коллекция, сообщения слишком просты) со следующей структурой:

> db.posts.find()

{ "_id" : ObjectId("50ad8d451d41c8fc58000003"), "title" : "Lorem ipsum", "author" : 
"John Doe", "content" : "This is the content", "tags" : [ "SOME", "RANDOM", "TAGS" ] }

Я ожидаю, что эта коллекция охватит сотни тысяч, возможно, миллионы, которые мне понадобятся для запроса сообщений по тегам, а также для группировки результатов по тегам и отображения результатов в виде страниц. Вот тут-то и возникает структура агрегации. Я планирую использовать метод aggregate () для запроса коллекции:

db.posts.aggregate([
  { "$unwind" : "$tags" },
  { "$group" : {
      _id: { tag: "$tags" },
      count: { $sum: 1 }
  } }
]);

Уловка в том, что для создания пагинатора мне нужно знать длину выходного массива. Я знаю, что для этого вы можете сделать:

db.posts.aggregate([
  { "$unwind" : "$tags" },
  { "$group" : {
      _id: { tag: "$tags" },
      count: { $sum: 1 }
  } }
  { "$group" : {
      _id: null,
      total: { $sum: 1 }
  } }
]);

Но это отбросило бы выходные данные предыдущего конвейера (первая группа). Есть ли способ объединить две операции при сохранении каждого конвейера?с выводом? Я знаю, что вывод всей агрегатной операции может быть приведен к массиву на каком-либо языке, и его содержимое может быть подсчитано, но может существовать вероятность того, что конвейерный вывод может превысить предел 16 МБ. Кроме того, выполнение одного и того же запроса только для того, чтобы получить количество, кажется пустой тратой

Так возможно ли получить результат документа и рассчитать одновременно? Любая помощь приветствуется.

Ответы на вопрос(2)

Ваш ответ на вопрос