2013-06-26 99 views
8

如何获得流星mongodb的N个最新记录?获得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它的超级?!

+0

或者你可以通过你的时间戳 – crapthings

+0

啊有这样的时间戳字段然后进行排序,但不应该是必要的MongoDB的因为我可以从_id得到这个结果? – tobbe

回答

9

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

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

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

我使用date_created值正常排序。由于自然顺序有时会发生更改,因此您在现有文档上执行update操作。

+0

啊好的,虐待创建一个date_created,而不是。很好的解释! – tobbe

+1

我可以再问一个问题吗? :)现在,如果我对它们进行排序,并将其呈现他们最终是这样的: (顶部) 最新 新 老 最古老 (底部) ..但我想的相反顺序,使最新的显示在底部, 我怎样才能做到这一点?我曾尝试使用date_created:1和-1(10)。但是当使用“1”时,我只能看到最早的10个:/ – tobbe

4

我受到限制(我认为这是一个流星错误)。我结束了写这个函数:

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

时间戳字段的定义如下:

timestamp: new Date().getTime()