dongyong5255 2014-10-23 16:17
浏览 14
已采纳

Mongo聚合

I have following documents in my collection

{
    "_id": ObjectId("54490b8104f7142f22ecc97f"),
        "title": "Sample1",
        "slug": "samplenews",
        "cat": "sports",
        "desc": "sampletextsampletext",
        "published_date": ISODate("2014-10-23T14:06:57.0Z"),

} {
    "_id": ObjectId("54490b8104f7142f22ecc97f"),
        "title": "Sample2",
        "slug": "samplenews2",
        "category": "entertaintment",
        "desc": "sampletextsampletext",
        "published_date": ISODate("2014-10-22T14:06:57.0Z"),

} {
    "_id": ObjectId("54490b8104f7142f22ecc97f"),
        "title": "Sample3",
        "slug": "samplenews3",
        "category": "entertaintment",
        "desc": "sampletextsampletext",
        "published_date": ISODate("2014-9-22T14:06:57.0Z"),

} {
    "_id": ObjectId("54490b8104f7142f22ecc97f"),
        "title": "Sample4",
        "slug": "samplenews4",
        "category": "other",
        "desc": "sampletextsampletext",
        "published_date": ISODate("2014-10-22T14:06:57.0Z"),

}

I need one query to get top 5 latest news from each category.any suggestions?

  • 写回答

3条回答 默认 最新

  • douyong1850 2014-10-23 18:44
    关注

    Assuming you have the latest version of mongodb installed, one way of doing it is:

    • Sort the records based on the published_date in descending order.
    • group the records based on their category. For each group, collect all the records together in an array.
    • In the javascript/client side code, slice the top 5 records, of each group(category).

    The $slice is not available in the server side $project aggregation pipeline operator, which holds us from performing the operation on the server side.

    var result = db.collection.aggregate(
    [
    {$sort:{"published_date":-1}},
    {$group:{"_id":"$category","values":{$push:"$$ROOT"}}}
    ]
    ).map(function(doc){
    return {"category":doc._id,"records":doc.values.slice(0,5)};
    });
    

    The result variable will now be an array of documents. Each document representing each category and in turn having an array of top 5 records.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 qgcomp混合物线性模型分析的代码出现错误:Model aliasing occurred
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答