Список комментариев с первой тройкой на основе созданной даты и времени
Использование агрегации $ group для группировки вашего документа на основе newsId
, а затем $ slice для управления количеством элементов в массиве.
db.comment.aggregate([
{ '$sort': { 'createdAt': 1 } }, //Where timestamps is true
{
'$group': {
'_id': '$newsId',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'top_three': {
'$slice': ['$docs', 3]
}
}
}
])
Список новостей, с 3 комментариями для каждой новости
Использование агрегации с $ lookup и $ limit
db.news.aggregate([{
$lookup: {
from: "comments",
let: { news: "$_id" },
pipeline: [
{ $match: { "$expr": { "$eq": ["$newsId", "$$news"] } } },
{ '$sort': { 'createdAt': 1 } },
{ $limit: 3 }
],
as: "comments"
},
}])