【问题标题】:get N latest records获取N条最新记录
【发布时间】:2013-07-23 22:15:42
【问题描述】:

mongodb如何获取最新的N条记录?

我知道我可以用普通的 mongodb 做到这一点:db.foo.find().sort({_id:1});,所以我认为这适用于流星:collection.find({chatroom: Session.get("room")}, {sort: {_id:1}, limit: N })

但这只会返回一些“随机”文档。我猜它们是 _id 值最低的 10 条记录,例如 _id= aaaaa 和 _id= aaaab。

我在这里缺少什么?在普通的 mongodb 中它超级简单?!

【问题讨论】:

  • 或者你可以有一个像时间戳这样的字段,然后按你的时间戳排序
  • 是的,但这对于 mongodb 来说不是必需的,因为我可以从 _id 中获得它?

标签: meteor


【解决方案1】:

尝试使用 mongoDB 的 $natural 排序说明符。

collection.find({chatroom: Session.get("room")}, {sort: {$natural : 1}, limit: N });

自然顺序是数据库在磁盘上存储文档的顺序。通常是广告订单。

我使用date_created 值进行正常排序。因为自然顺序有时会发生变化,当您对现有文档执行update 操作时。

【讨论】:

  • 啊,好吧,那就创建一个 date_created 来代替。很好的解释为什么!
  • 我可以再问一个问题吗? :) 现在,如果我对它们进行排序并渲染它们,它们最终会像这样:(顶部)最新的新旧最旧的(底部)..但我想要相反的顺序,以便最新的显示在底部,我该怎么做?我已经尝试同时使用 date_created: 1 和 -1 和 limit(10)。但是当使用“1”时,我只看到 10 个最旧的:/
【解决方案2】:

我也陷入了限制(我认为这是一个 Meteor 错误)。我最终写了这个函数:

Template.content.messages = function () {
    var items = Messages.find({}, {sort: {timestamp : 1} }).fetch();
    return items.slice(-15);
}

时间戳字段定义如下:

timestamp: new Date().getTime()

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 2022-12-07
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多