如何在MongoDB中获取最新文档?

时间:2014-09-30 21:51:54

标签: mongodb

假设a有一个包含以下文档的集合:

{
    _id:        0,
    data:       'foo',
    createdAt:  Tue Sep 30 2014 17:00:00 GMT-0300 (BRT)
}

{
    _id:        1,
    data:       'foo',
    createdAt:  Tue Sep 30 2014 18:00:00 GMT-0300 (BRT)
}

{
    _id:        2,
    data:       'foo',
    createdAt:  Tue Sep 30 2014 18:00:00 GMT-0300 (BRT)
}

{
    _id:        3,
    data:       'bar',
    createdAt:  Tue Sep 30 2014 18:00:00 GMT-0300 (BRT)
}

如何在“一次操作”中获取所有最新的{data: 'foo'}文档?在这种情况下,文档包含_id 12

我不知道有多少元素,所以我做不到:

db.coll.find({data: 'foo', createdAt: ???})

或:

db.coll.find({data: 'foo'}).sort({createdAt: -1}).limit(???);

我知道的唯一方法有两个步骤:

var d = db.coll.find({data: 'foo'}).sort({createdAt: -1}).next();
var c = db.coll.find({data: 'foo', createdAt: d.createdAt});

有一种方法可以一步完成吗?

相关问题:[1]

1 个答案:

答案 0 :(得分:0)

假设您关心的只是ID和时间,并且不需要查看每个返回文档的整个文档,您可以使用Aggregation Framework.

这是一个未经测试的示例,它将返回最新的时间戳以及随之而来的所有_id值。

db.coll.aggregate({$match: {data: 'foo'}}, {$group: {_id: '$created_at', id: {$addToSet: '$_id'}}}, {$sort: {_id: -1}}, {$limit: 1})
相关问题