Я хотел бы получить документы с наибольшим N field
с для каждой из N категорий.Например, посты с 3 самыми высокими score
с из каждого из последних 3 месяцев.Таким образом, каждый месяц будет иметь 3 сообщения, которые «выиграли» за этот месяц.
Вот то, что моя работа до сих пор получила, упростила.
// simplified
db.posts.aggregate([
{$bucket: {
groupBy: "$createdAt",
boundaries: [
ISODate('2019-06-01'),
ISODate('2019-07-01'),
ISODate('2019-08-01')
],
default: "Other",
output: {
posts: {
$push: {
// ===
// This gets all the posts, bucketed by month
score: '$score',
title: '$title'
// ===
}
}
}
}},
{$match: {_id: {$ne: "Other"}}}
])
Я попытался использовать$ slice оператор между // ===
с, но с ошибкой (ниже).
postResults: {
$each: [{
score: '$score',
title: '$title'
}],
$sort: {score: -1},
$slice: 2
}
An object representing an expression must have exactly one field: { $each: [ { score: \"$score\", title: \"$title\" } ], $sort: { baseScore: -1.0 }, $slice: 2.0 }