我想从MongoDB集合中获取最后5个文档,然后继续跟踪它以获取新文档。这可以通过一个查询完成吗,还是我真的需要两个查询?如果是两个查询,在不添加额外字段的情况下实现此目的的最佳方法是什么?
虽然任何语言的答案都可以,但这里有一个示例节点.js我尝试实现的代码片段(省略错误处理,并根据问题的第一个答案编辑片段):
MongoClient.connect("mongodb://localhost:1338/mydb", function(err, db) {
db.collection('mycollection', function(err, col) {
col.count({}, function(err, total) {
col.find({}, { tailable:true, awaitdata:true, timeout:false, skip:total-5, limit:5 }, function(err, cursor) {
cursor.each(function(err, doc) {
console.dir(doc); // print the document object to console
});
});
});
});
});
问题:上面的代码从第一个文档开始打印所有文档,然后等待更多文档。选项skip
和limit
不起作用。
问题:如何轻松获取 5 个最新文档,然后继续跟踪更多文档?任何语言的例子都可以,不必是node.js。
(答案已编辑,知道这不适用于这些版本很有用。
如果集合不可跟踪,则需要找出有多少项目,用于该用途count
,然后使用skip
选项跳过第一个计数 5 个项目。
这将不起作用,tailable
和skip
不能一起工作(MongoDB 2.4.6,node.js 0.10.18):
MongoClient.connect("mongodb://localhost:1338/mydb", function(err, db) {
db.collection('mycollection', function(err, col) {
col.count({ }, function(err, total) {
col.find({ }, { tailable: true, awaitdata: true, timeout: false, skip: total - 5, limit: 5 }, function(err, cursor) {
cursor.each(function(err, doc) {
console.dir(doc);
});
});
});
});
});