Javascript 将具有相同值的文档分组,并为每个组获取具有最大值的文档

Javascript 将具有相同值的文档分组,并为每个组获取具有最大值的文档,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,我有一个类似的mongodb系列: { "_id" : 1, "item" : "item1", "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") } { "_id" : 2, "item" : "item2", "quantity"

我有一个类似的mongodb系列:

{ "_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") }
我想获取每个项目的最新文档(基于日期值)

表示我希望查询/聚合提供:

{ "_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
    通过
    获取第一个根文档
  • $replaceRoot
    将根文档对象替换为根

请阅读“不要问……你没有试图找到答案的问题(展示你的作品!)”@jabaa我不能与你争辩,但事实上我做了一些失败的尝试,但太愚蠢了,无法分享。在这种情况下,这个问题是离题的。这个分组有多“昂贵”(时间),如果您有超过300万个文档?这可能会很昂贵,在这种情况下,您可以使用
日期
项目
字段中的复合索引,第二,如果您不想麻烦这个查询,并且确实需要快速响应,那么您可以创建一个单独的集合,并在每次新版本到达时按项目管理/保存/更新上一版本。
db.collection.aggregate([
  { $sort: { date: -1 } },
  {
    $group: {
      _id: "$item",
      root: { $first: "$$ROOT" }
    }
  },
  { $replaceRoot: { newRoot: "$root" } }
])