将具有相同值的文档分组,并为每组获取具有最大值的文档 [英] Group documents with same value, and get document with max value for every group

查看:36
本文介绍了将具有相同值的文档分组,并为每组获取具有最大值的文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类似的 mongodb 集合:

I have a similar mongodb collection:

{ "_id" : 1, "item" : "item1", "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "item2", "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "item2", "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "item1", "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "item2", "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }

我想获取每个项目

意味着我想要一个查询/聚合给我:

Means I want a query/aggregation to give me:

{ "_id" : 4, "item" : "item1", "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "item2", "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }

推荐答案

  • $sort日期降序
  • $group通过item得到第一个根文档
  • $replaceRoot 将根文档对象替换为根
    • $sort by date in descending order
    • $group by item and get the first root document
    • $replaceRoot to replace root document object to root
    • db.collection.aggregate([
        { $sort: { date: -1 } },
        {
          $group: {
            _id: "$item",
            root: { $first: "$$ROOT" }
          }
        },
        { $replaceRoot: { newRoot: "$root" } }
      ])
      

      游乐场

      这篇关于将具有相同值的文档分组,并为每组获取具有最大值的文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆