返回组中的最新文档

时间:2019-03-14 17:17:15

标签: mongodb aggregation-framework

我在mongodb集合(> 1M)中存储了很多文档。每个文档都有一个时间戳,它们分为几类(符号)。如何获得每个类别中的最新文档(每个时间戳)?请记住,由于文档数量众多,此查询应尽可能高效。

我最初的方法是对整个集合进行排序,然后以某种方式使用distinct选择文档。阅读mongodb手册后,我意识到聚合查询最适合我的需求。 这就是我现在所拥有的:

db.trades.aggregate([{$group: {_id: '$symbol', time: {$max: '$time'}}}])

这似乎也不正确,这是否也是我正在尝试做的正确方法?

1 个答案:

答案 0 :(得分:0)

您可以使用$first运算符。像

db.trades.aggregate([
    {$sort: {time: -1}},
    {$group: {_id: '$symbol', doc: {$first: '$$ROOT'}}}
])

您需要创建一个索引以确保最佳性能:

db.trades.createIndex( { time: -1 } )