mongodb - 从每个组中选择前 N 行

标签 mongodb aggregation-framework grouping limit

我的博客平台使用 mongodb,用户可以在其中创建自己的博客。所有博客的所有条目都在条目集合中。条目的文档如下所示:

{
  'blog_id':xxx,
  'timestamp':xxx,
  'title':xxx,
  'content':xxx
}

正如问题所说,有没有办法为每个博客选择最后 3 个条目?

最佳答案

您需要首先按 blog_idtimestamp 字段对集合中的文档进行排序,然后执行一个初始组,以降序创建原始文档的数组.之后,您可以使用文档对数组进行切片以返回前 3 个元素。

在这个例子中可以遵循直觉:

db.entries.aggregate([
    { '$sort': { 'blog_id': 1, 'timestamp': -1 } }, 
    {       
        '$group': {
            '_id': '$blog_id',
            'docs': { '$push': '$$ROOT' },
        }
    },
    {
        '$project': {
            'top_three': { 
                '$slice': ['$docs', 3]
            }
        }
    }
])

关于mongodb - 从每个组中选择前 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498506/

相关文章:

node.js - 获取总数以及 Mongoose 查询跳过和限制

jQuery 将每个 X 元素包装在 div 中

postgresql - 计算Postgresql中相似字符串的数量

javascript - 表达 Mongoose 在找到后在 View 上显示数据

javascript - 持久化对象之间的 MongoDB 原型(prototype)继承

node.js - Mongoose 映射减少()

c# - 如何先按一个属性排序,然后再按另一个属性排序,而不考虑第一个属性的关系?

mongodb - 仅当对象属性等于搜索词时,如何更新数组中的对象

javascript - 更新 mongodb 中的聚合结果?

MongoDB 聚合计数太慢