我在mongodb集合(> 1M)中存储了很多文档。每个文档都有一个时间戳,它们分为几类(符号)。如何获得每个类别中的最新文档(每个时间戳)?请记住,由于文档数量众多,此查询应尽可能高效。
我最初的方法是对整个集合进行排序,然后以某种方式使用distinct
选择文档。阅读mongodb手册后,我意识到聚合查询最适合我的需求。
这就是我现在所拥有的:
db.trades.aggregate([{$group: {_id: '$symbol', time: {$max: '$time'}}}])
这似乎也不正确,这是否也是我正在尝试做的正确方法?
答案 0 :(得分:0)
您可以使用$first运算符。像
db.trades.aggregate([
{$sort: {time: -1}},
{$group: {_id: '$symbol', doc: {$first: '$$ROOT'}}}
])
您需要创建一个索引以确保最佳性能:
db.trades.createIndex( { time: -1 } )