Получение результата $ 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 МБ. Кроме того, выполнение одного и того же запроса только для того, чтобы получить количество, кажется пустой тратой
Так возможно ли получить результат документа и рассчитать одновременно? Любая помощь приветствуется.