Сначала необходимо отсортировать документы в коллекции по полям blog_id
и timestamp
, а затем создать исходную группу, которая создает массив исходных документов в порядке убывания. После этого вы можете нарезать массив с документами, чтобы вернуть первые 3 элемента.
Интуиция может следовать в этом примере:
db.entries.aggregate([
{ '$sort': { 'blog_id': 1, 'timestamp': -1 } },
{
'$group': {
'_id': '$blog_id',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'top_three': {
'$slice': ['$docs', 3]
}
}
}
])