【问题标题】:How to take the latest article for each category in mongodb?如何在mongodb中获取每个分类的最新文章?
【发布时间】:2016-02-06 23:04:05
【问题描述】:

我有下一篇文章结构:

var articleSchema=new Schema({
    id : Number,
    title : String,
    sefriendly : String,
    created : Date,
    categories: [
        {
            id: Number,
            name: String,
            sefriendly: String,
            image: String
        }
    ],
    author: {
        id: Number,
        name: String
    }
});

所以我想要的是将一篇按created 字段排序的最新文章作为一组categoryIds。例如,我有电影、电视、音乐、书籍等类别,我想为每个类别获取最新文章。是否可以在一个查询中完成?

【问题讨论】:

    标签: javascript mongodb mongoose aggregation-framework


    【解决方案1】:

    首先为创建日期和类别 ID 创建索引:

    db.article.ensureIndex({"created":-1,"categories.id":1})

    然后拿最新的文章:

    db.article.aggregate(    [  {$unwind : "$categories"}     { $sort: {"created":-1,"categories.id":1 } },      {        $group:          {            _id: {"categories_id":"$categories.id"},            lastDate: { $last: "$created" }          }      }  ] ,{"allowDiskUse":true})
    

    也许有一点语法错误

    【讨论】:

    • 嗯,这行不通。如果最后 X 篇文章是在类别 Y 中创建的,我必须知道 X 才能找到下一个类别的第一篇文章。
    • 但是我需要获取文章的所有字段,并且只有日期和类别.id
    • 如果你想在 _id: {...} 中添加所有字段,例如:stackoverflow.com/questions/16662405/…
    • 好的,如何按类别ID过滤?我的意思是拿某些类别的最后一篇文章,而不是全部
    • 使用匹配。先生,如果我的回答很好。请接受我的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2014-07-19
    相关资源
    最近更新 更多