猫鼬找到特定领域的x文档

时间:2020-04-23 10:49:47

标签: node.js mongodb mongoose

我有一组视频,每个视频文档都有一个user_id。 我需要获取每个用户的最后5个视频。

不知道从哪里开始...尝试分组没有成功。

任何帮助将不胜感激。

1 个答案:

答案 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

说明:

  1. 在第一阶段,您在_id字段上对整个集合进行了降序排序。首先必须进行排序,因为mongo中没有运算符可以对分组的项目afaik进行排序。

  2. 然后按user_id字段分组。我们将每个组的所有文档推到一个名为“视频”的新字段中。 $$ ROOT变量使您可以访问每个组的所有文档。

  3. 最后一个$ project阶段使用$ slice来选择上一个阶段中视频数组中的前5个项目,并将其设置在同名字段上。