После трубопровода в $match
, что вам нужно сделать начальную группу, которая создает массив исходных документов. После этого вы можете $slice
массив с документами, чтобы вернуть 5 элементов.
Интуиция может быть в данном примере:
db.items.aggregate([
{ '$match' : { 'type': { '$gte': 1, '$lte': 3 } } },
{
'$group': {
'_id': '$type',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'five_docs': {
'$slice': ['$docs', 5]
}
}
}
])
выше будет возвращать 5 документов без сортировки в массиве. Если вам необходимо вернуть в ТОП 5 документов в отсортированном порядке, то вы можете ввести $sort
трубопровод до группируют документы, которые переупорядочиваем документы Попадая в $group
трубопровода по type
и dateupdate
полей:
db.items.aggregate([
{ '$match' : { 'type': { '$gte': 1, '$lte': 3 } } },
{ '$sort': { 'type': 1, 'dateupdate': -1 } }, // <-- re-order here
{
'$group': {
'_id': '$type',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'top_five': {
'$slice': ['$docs', 5]
}
}
}
])