我找不到任何地方有这样的记录。默认情况下,find()操作将从头获取记录。我怎么能得到mongodb的最后N条记录?

编辑:我也想返回的结果从最近到最近的顺序,而不是相反。


当前回答

如果我理解了你的问题,你需要按升序排序。

假设你有一些id或日期字段称为“x”,你会做…

.sort ()


db.foo.find().sort({x:1});

1将升序排序(从最老到最新),而-1将降序排序(从最新到最老)。

如果你使用自动创建的_id字段,它有一个日期嵌入其中…所以你可以用它来订购…

db.foo.find().sort({_id:1});

这将返回从最老到最新排序的所有文档。

自然秩序


你也可以使用上面提到的自然顺序……

db.foo.find().sort({$natural:1});

同样,使用1或-1取决于你想要的顺序。

使用.limit ()


最后,在执行这种广泛开放的查询时添加一个限制是一个很好的实践,这样你就可以这样做…

db.foo.find().sort({_id:1}).limit(50);

or

db.foo.find().sort({$natural:1}).limit(50);

其他回答

查看查询:排序和自然顺序,http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order 以及游标方法下的sort() http://www.mongodb.org/display/DOCS/Advanced+Queries

如果我理解了你的问题,你需要按升序排序。

假设你有一些id或日期字段称为“x”,你会做…

.sort ()


db.foo.find().sort({x:1});

1将升序排序(从最老到最新),而-1将降序排序(从最新到最老)。

如果你使用自动创建的_id字段,它有一个日期嵌入其中…所以你可以用它来订购…

db.foo.find().sort({_id:1});

这将返回从最老到最新排序的所有文档。

自然秩序


你也可以使用上面提到的自然顺序……

db.foo.find().sort({$natural:1});

同样,使用1或-1取决于你想要的顺序。

使用.limit ()


最后,在执行这种广泛开放的查询时添加一个限制是一个很好的实践,这样你就可以这样做…

db.foo.find().sort({_id:1}).limit(50);

or

db.foo.find().sort({$natural:1}).limit(50);

你可以使用sort(), limit(),skip()从任何跳过的值开始获得最后N个记录

db.collections.find().sort(key:value).limit(int value).skip(some int value);

最后添加的N条记录,从最近的到最近的,可以用这个查询看到:

db.collection.find().skip(db.collection.count() - N)

如果你想把它们的顺序颠倒:

db.collection.find().sort({ $natural: -1 }).limit(N)

如果你安装了Mongo-Hacker,你还可以使用:

db.collection.find().reverse().limit(N)

如果你厌倦了一直写这些命令,你可以在你的~/.mongorc.js中创建自定义函数。如。

function last(N) {
    return db.collection.find().skip(db.collection.count() - N);
}

然后在mongo shell中输入last(N)

 db.collection.find().sort({$natural: -1 }).limit(5)