MongoDb获取最后几个文件并等待tailable游标

时间:2013-09-17 12:34:14

标签: mongodb cursor tail

我想从MongoDB集合中获取最后5个文档,然后继续为新文档添加文档。这可以通过一个查询完成,还是我真的需要两个查询?如果有两个查询,那么在不添加额外字段的情况下实现此目的的最佳方法是什么?

虽然任何语言的答案都很好,但这里有一个示例 node.js 我尝试实现的代码片段(省略错误处理,并根据问题的第一个答案编辑片段):< / p>

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
        });
      });
    });
  });
});

问题:上面的代码打印 all 从第一个开始的文档,然后等待更多。选项skiplimit无效。

问题:如何轻松获取5个最新的文档,然后继续追踪更多?任何语言的示例都可以,不一定是 node.js

1 个答案:

答案 0 :(得分:1)

(编辑答案,知道这对这些版本不起作用很有用。)

如果收集不可用,您需要找出有多少项目,使用count,然后使用skip选项,跳过第一个计数5项。< / p>

这将 NOT 工作,tailableskip无法一起工作(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); 
        });
      });
    });
  });
});