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 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100