我有一组视频,每个视频文档都有一个user_id。 我需要获取每个用户的最后5个视频。
不知道从哪里开始...尝试分组没有成功。
任何帮助将不胜感激。
答案 0 :(得分:1)
尝试一下此管道:
db.collection.aggregate([
{
$sort: { _id: -1 }
},
{
$group: {
_id: "$user_id",
videos: { $push: "$$ROOT" }
}
},
{
$project: {
_id: 0,
user_id: "$_id",
videos: { $slice: ["$videos", 5] }
}
}
])
https://mongoplayground.net/p/6NOOJDnfIhk
说明:
在第一阶段,您在_id字段上对整个集合进行了降序排序。首先必须进行排序,因为mongo中没有运算符可以对分组的项目afaik进行排序。
然后按user_id字段分组。我们将每个组的所有文档推到一个名为“视频”的新字段中。 $$ ROOT变量使您可以访问每个组的所有文档。
最后一个$ project阶段使用$ slice来选择上一个阶段中视频数组中的前5个项目,并将其设置在同名字段上。