我找不到任何地方有这样的记录。默认情况下,find()操作将从头获取记录。我怎么能得到mongodb的最后N条记录?
编辑:我也想返回的结果从最近到最近的顺序,而不是相反。
我找不到任何地方有这样的记录。默认情况下,find()操作将从头获取记录。我怎么能得到mongodb的最后N条记录?
编辑:我也想返回的结果从最近到最近的顺序,而不是相反。
当前回答
查看查询:排序和自然顺序,http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order 以及游标方法下的sort() http://www.mongodb.org/display/DOCS/Advanced+Queries
其他回答
您不能根据集合的大小“跳过”,因为它不会考虑查询条件。
正确的解决方案是从期望的端点开始排序,限制结果集的大小,然后在必要时调整结果的顺序。
下面是一个基于实际代码的示例。
var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);
query.exec(function(err, results) {
if (err) {
}
else if (results.length == 0) {
}
else {
results.reverse(); // put the results into the desired order
results.forEach(function(result) {
// do something with each result
});
}
});
你可以使用sort(), limit(),skip()从任何跳过的值开始获得最后N个记录
db.collections.find().sort(key:value).limit(int value).skip(some int value);
db.collection.find().hint( { $natural : -1 } ).sort(field: 1/-1).limit(n)
根据mongoDB文档:
您可以指定{$natural: 1}强制查询执行转发集合扫描。 您还可以指定{$natural: -1}来强制查询执行反向收集扫描。
如果我理解了你的问题,你需要按升序排序。
假设你有一些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);
如果你使用MongoDB compass,你可以使用sort field来过滤,