【问题标题】:How can I get the most recent documents in MongoDB?如何获取 MongoDB 中的最新文档?
【发布时间】:2014-10-01 06:15:31
【问题描述】:

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

{
    _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]

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

    这是一个未经测试的示例,它会返回最新的时间戳以及与之相关的所有 _id 值。

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

    【讨论】:

    • 使用这样的日期格式,我真的怀疑这是否可行。会做一些研究。
    • 肯定会的。你不喜欢它什么?只要元素可以被视为平等,该小组就会工作。排序将取决于其存储为时间戳还是字符串。我假设它是一个时间戳,因为没有引号,并且他已经在他的示例中展示了排序的能力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2018-09-04
    • 2016-03-26
    • 2021-06-26
    • 1970-01-01
    • 2018-05-20
    • 2021-11-16
    相关资源
    最近更新 更多