假设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
1
和2
。
我不知道有多少元素,所以我做不到:
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]。
答案 0 :(得分:0)
假设您关心的只是ID和时间,并且不需要查看每个返回文档的整个文档,您可以使用Aggregation Framework.
这是一个未经测试的示例,它将返回最新的时间戳以及随之而来的所有_id值。
db.coll.aggregate({$match: {data: 'foo'}}, {$group: {_id: '$created_at', id: {$addToSet: '$_id'}}}, {$sort: {_id: -1}}, {$limit: 1})