当前位置: 首页 > 知识库问答 >
问题:

MongoDb获取最后几个文档和等待的可裁剪光标

牛经赋
2023-03-14

我想从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
        });
      });
    });
  });
});

问题:上面的代码从第一个文档开始打印所有文档,然后等待更多文档。选项跳过限制无效。

问题:如何轻松获取5个最新文档,然后继续跟踪更多文档?任何语言的示例都可以,不必是节点。js。

共有1个答案

唐星晖
2023-03-14

(答案已编辑,知道这不适用于这些版本很有用。)

如果集合不可裁剪,您需要找出有多少项,为此使用count,然后使用skip选项跳过第一个count-5项。

这不起作用,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); 
        });
      });
    });
  });
});
 类似资料:
  • 我有50多个需要裁剪的光栅文件(ASCII格式)。我已经以ASCII格式从ArcMap导出了遮罩,并将其加载到R中。如何使其适用于一行中的所有光栅,并以与之前相同的名称导出它们(当然是在不同的文件夹中,以避免覆盖)? 我知道光栅软件包中有裁剪功能,但到目前为止我从未使用过。我只是把它们堆放起来做进一步的栖息地分析。 到目前为止,我的代码:

  • 我正在使用下面的查询来获取最新的文档。 但问题是,这还可以获取很久以前插入的旧文档。但是对于我的用例,我希望在几分钟前插入文档,比如说5分钟。对此的确切查询应该是什么。

  • 我们目前正在探索MongoDB中的上限集合和可跟踪游标,以创建通知排队系统。然而,在创建了一个简单的LinqPad测试(代码如下)后,我们在运行时注意到,Mongo不断分配内存,直到没有更多的可用资源,即使我们没有插入任何记录。这种分配一直持续到所有系统RAM被使用,此时Mongo简单地停止响应。 由于我们还不熟悉封顶系列和可定制游标,所以我想确保在提交bug之前,我们没有错过任何明显的东西。 注

  • 如何将最新文档插入(一个独立的、没有RS的)MongoDb,而不是现有的集合? 如何在文档之后插入所有文档?

  • 我正在使用Scala、Akka和ReactiveMongo的Play框架。我想使用MongoDB中的集合作为循环队列。几个参与者可以在其中插入文件;一个参与者在这些文档可用时立即检索它们(一种发布-订阅系统)。我使用的是封顶系列和可裁剪光标。我总是用flush命令从同一个集合中检索所有元素,否则我就不可能用flush命令从该集合中检索所有元素。有没有替代方案?例如,有没有一种方法可以在不移除元素的

  • 问题内容: 所以我有一个弹性的搜索索引,并且要向它发送带有时间戳的文档。我想知道是否有一种方法可以根据时间戳提取最后一个文档。即说要弹性给我最后一次的文档。 谢谢。 问题答案: 是的,您只需索取一个文档()并通过减少时间戳进行排序