mongodb:如何得到最后的N个logging?
我找不到任何地方已经logging了这一点。 默认情况下,find()操作将从头开始获取logging。 如何获得mongodb中的最后N个logging?
编辑:我也希望返回的结果从最近到最近sorting,而不是相反。
如果我理解你的问题,你需要按升序sorting。
假设你有一些名为“X”的ID或date字段,你会做…
。分类()
db.foo.find().sort({x:1});
1将按升序(从最旧到最新)sorting, -1将按降序排列(从最新到最旧)。
如果您使用自动创build_id字段它有一个embedded的date…所以你可以使用它来订购…
db.foo.find().sort({_id:1});
这将返回从最旧到最新sorting的所有文档。
自然顺序
您也可以使用上面提到的自然顺序 …
db.foo.find().sort({$natural:1});
再次,使用1或-1取决于你想要的顺序。
使用.limit()
最后,这是一个很好的做法,当做这种广泛开放的查询时添加一个限制,所以你可以做…
db.foo.find().sort({_id:1}).limit(50);
要么
db.foo.find().sort({$natural:1}).limit(50);
使用此查询可以看到最近N个添加的logging,从不新近到最新的logging:
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中创build自定义函数。 例如
function last(N) { return db.collection.find().skip(db.collection.count() - N); }
然后从一个mongo shell中inputlast(N)
为了得到最后的N条logging,你可以执行下面的查询:
db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)
如果你只想要最后一个logging:
db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})
注意:代替$ natural,您可以使用集合中的其中一列。
您可以使用sort()
, limit()
, skip()
从任何跳过的值中获取最后一个Nlogging
db.collections.find().sort(key:value).limit(int value).skip(some int value);
您不能根据集合的大小“跳过”,因为它不会考虑查询条件。
正确的解决scheme是从所需的终点进行sorting,限制结果集的大小,然后根据需要调整结果的顺序。
这里是一个基于真实代码的例子。
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 }); } });
查看查询:sorting和自然顺序, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order以及在光标方法下的sort(); http://www.mongodb.org/display / DOCS /高级+查询
最后的function应该是sort
,而不是limit
。
例:
db.testcollection.find().limit(3).sort({timestamp:-1});