首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mongo Tailable Cursor {错误:尾部游标中没有更多文档}

Mongo Tailable Cursor是MongoDB的一个特性,它提供了一种类似于持续查询(continuous querying)的功能。当使用Tailable Cursor时,查询会在最后一次查询的结果上持续等待并返回新的文档。

具体来说,Tailable Cursor是一种特殊的游标,它允许我们从集合(collection)的末尾开始获取数据,并在新文档插入时实时获取更新。这种查询适用于需要实时监听集合中数据变化的场景,比如日志文件的实时处理、消息队列、社交网络的实时通知等。

Tailable Cursor的特点包括:

  1. 实时监听:Tailable Cursor会保持打开状态,不会在获取所有数据后立即关闭,而是等待新文档的插入。
  2. 可持续操作:一旦Tailable Cursor到达末尾,它会继续等待新文档的插入,并在有新文档时返回结果。这样可以实现长期持续查询的效果。
  3. 顺序获取:Tailable Cursor会按照插入顺序逐个返回文档,确保数据的有序性。

使用Tailable Cursor时,需要注意以下几点:

  1. 集合必须是capped collection(固定大小的集合),这是因为Tailable Cursor依赖于集合的顺序和固定大小来工作。
  2. 对于非capped collection,需要使用$natural排序修饰符来使Tailable Cursor生效。
  3. Tailable Cursor使用的查询语句通常包含$gt(大于)操作符来指定起始点,以避免返回已经获取过的文档。

在腾讯云的云数据库MongoDB中,并未提供与Tailable Cursor直接相关的产品和服务。但可以通过在应用程序中使用MongoDB的Tailable Cursor功能来实现实时监听和获取数据更新的需求。

更多关于MongoDB Tailable Cursor的详细信息可以参考腾讯云官方文档: https://docs.mongodb.com/manual/core/tailable-cursors/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MongoDB常用工具和集合方法

db.collection.createIndex() 创建一个集合索引 db.collection.count() 返回集合总数或匹配查询的结果集总数 db.collection.deleteOne() 删除集合中的一个文档...db.collection.deleteMany() 删除集合中的多个文档 db.collection.dataSize() 返回集合的大小 db.collection.distinct() 返回具有指定字段不同值的文档...,如果没有错误则为空 db.hostInfo() 返回当前数据库主机系统的相关信息 db.killOp() 终止指定的操作 db.listCommands() 显示公共数据库的命令列表 db.logout...Method(游标方法) 方法名 描述 cursor.snapshot() cursor.itcount() cursor.batchSize() cursor.pretty() cursor.hint...() cursor.next() cursor.hasNext() cursor.readConcern() cursor.skip() cursor.readPref() cursor.tailable

1.2K30

MongoDB 新功能介绍-Change Streams

基于早期MongoDB版本实现如跨平台数据同步、消息通知、ETL及oplog备份等服务时大多依赖于 Tailable Cursors 的方式。...的change stream 游标 watchCursor = db.getSiblingDB("test").test.watch(); // 对游标watchCursor进行循环迭代(其中当游标关闭或游标迭代没有文档时...注意事项 1.尝试在单节点(非副本集节点)上创建ChangeStream游标会报如下错误: command failed: { "ok" : 0, "errmsg" :...当 ChangeStream 游标因特定操作导致退出后,Mongo Shell 下不会自动恢复,而对于3.6版本系列的各语言驱动则会尝试一次自动恢复。 7....再则,4.0版本为了支持多文档事务在事件输出文档中增加了另外两个参数txnNumber 和 lsid 分别表示事务号及会话ID ,需要注意的是同一个会话内事务ID从0开始自增。

2.2K20
  • MongoDB 新功能介绍-Change Streams

    基于早期MongoDB版本实现如跨平台数据同步、消息通知、ETL及oplog备份等服务时大多依赖于 Tailable Cursors 的方式。...的change stream 游标 watchCursor = db.getSiblingDB("test").test.watch(); // 对游标watchCursor进行循环迭代(其中当游标关闭或游标迭代没有文档时...注意事项 1.尝试在单节点(非副本集节点)上创建ChangeStream游标会报如下错误: command failed: { "ok" : 0, "errmsg" : "...当 ChangeStream 游标因特定操作导致退出后,Mongo Shell 下不会自动恢复,而对于3.6版本系列的各语言驱动则会尝试一次自动恢复。 7....再则,4.0版本为了支持多文档事务在事件输出文档中增加了另外两个参数txnNumber 和 lsid 分别表示事务号及会话ID ,需要注意的是同一个会话内事务ID从0开始自增。

    2.8K21

    【翻译】MongoDB指南CRUD操作(四)

    例如: 在mongo shell中,使用cursor.explain() 和 查询条件{ a: 1 }在集合records中查找文档: db.records.find( { a: 1 } ).explain...增加日志写操作之间的持续时间会减少总的写操作的次数,但也加大了发生错误时没有记录写操作的机会 2.7解释结果 3.0版本中的变化 MongoDB 提供db.collection.explain()方法,...2.9 Tailable游标 默认地,当客户端遍历完结果集后,MongoDB会自动地关闭游标。对于固定集合,可使用Tailable游标保持游标打开,当客户端遍历完最初的结果集后。...从概念上讲,Tailable游标等价于带有-f选项的Unix tail命令(例如使用follow模式)。客户端向集合中插入新文档后,tailable 游标仍然会继续检索文档。...tailable游标可能已经消亡或者失效,如果满足下面条件之一: 未匹配到查询结果。 游标返回集合末尾处的文档,随后应用程序删除了该文档。 一个消亡的游标id值为0。

    1.9K100

    Spring认证中国教育管理中心-Spring Data MongoDB教程八

    查看实现以获取有关映射的更多详细信息。 11.18.执行回调 所有 Spring 模板类的一个共同设计特性是所有功能都路由到模板的execute回调方法之一中。...对于有上限的集合,您可以使用在客户端消耗所有最初返回的数据后保持打开状态的Tailable Cursor。 可以使用 MongoOperations.createCollection....11.20.2.反应式可尾游标 使用具有反应数据类型的可尾游标允许构建无限流。可尾游标保持打开状态,直到它在外部关闭。当新文档到达上限集合时,它会发出数据。...如果查询返回不匹配或游标返回集合“结尾”处的文档,然后应用程序删除该文档,则可跟踪游标可能会失效或无效。以下示例显示了如何创建和使用无限流查询: 示例 117....处理时的错误会传递给 org.springframework.util.ErrorHandler. 如果没有另外说明ErrorHandler,默认情况下会应用日志附加。

    2K30

    MongoDB Change Stream之二——自顶向下流程剖析

    一个类似复制集协议中主从同步逻辑的,挂在节点**local.oplog.rs**表上的tailable cursor。...tailable cursor不会使用到索引,因此建立tailable cursor时的初始化扫描比较耗时。...我们还是以mongo-driver的go语言版本为例: [go driver 1.png] cursor.Next()会首先尝试查看本地缓存的队列里有没有,如果有的话直接取一个文档返回,没有的话则需要通过...会产生非法事件并交由后续流程进行错误的返回以及cursor的关闭等。...状态的取值可能为以下几种: kAdvanced——表示结果需要被处理,一切正常; kEOF——没有更多结果了; kPauseExecution——有问题,需要停止; 经过pipline里这一系列阶段的处理

    3.3K31

    【翻译】MongoDB指南引言

    Tailable游标 对于固定集合,可以使用Tailable游标。Tailable游标类似于Unix 的tail -f命令,Tailable游标追踪固定集合的末端。...新文档插入固定集合的同时,可以使用Tailable游标检索文档。 4.文档 MongoDB将数据存储为BSON 文档,BSON是一个JSON文档的二进制表示形式,但它所包含的数据类型比JSON多。..._id字段 在MongoDB中,文档需要_id字段作为主键,如果插入文档时没有指定_id字段,MongoDB会使用ObjectIds 作为默认的_id的默认值。...在MongoDB中,集合中的文档需要一个作为主键的唯一_id字段,如果没有指定_id字段,MongoDB默认将ObjectId类型值作为_id字段值。...将下面的文档插入people 集合: db.people.insert( { name : "Sally", age : undefined } ) 下面的查询会返回一个错误: db.people.find

    4.3K60

    【翻译】MongoDB指南CRUD操作(一)

    db.collection.find()方法返回用于匹配文档的游标(cursor )。...在mongo shell中如果一个游标没有赋给一个var变量,那么游标自动迭代20次以打印查询结果中的前20个文档。...示例集合 在mongo shell中,使用db.collection.find()来检索本页的集合,如果一个游标没有赋给一个var变量,那么游标自动迭代20次以打印查询结果中的前20个文档。...然而,如果返回的游标没有赋给var类型的变量,那么游标会自动迭代20次以打印结果集中前20个文档。 下面的例子描述了手动迭代游标来使用文档或迭代器索引的方式。...当你使用游标迭代并且达到了已返回那批的末尾时,如果还有更多的数据,cursor.next() 方法将会执行获取更多操作来检索下一批。

    5.5K90

    MongoDB Change Stream初体验

    但事情并没有这么简单!我们来看一下问题有可能出在什么地方。 如何从断点恢复 现实世界中,没有哪个应用是可以不间断运行的。不考虑bug导致的问题,正常的应用升级也会导致应用中断运行。...如何有效地处理订阅 假设在一个应用中需要订阅10个不同集合的变更情况,是否需要开10个tailable cursor去获取oplog的变更呢?如果是100个集合呢?出于效率考虑显然不应该这么做。...打开一个shell,订阅你需要关注的集合 比如: var cursor = db.bar.watch(); 为了便于演示,我们在这个shell中不断遍历这个游标以获取新数据: while(true) {...if (cursor.hasNext()) { print(JSON.stringify(cursor.next())); } } 打开另一个shell,向bar集合中插入一条数据...cursor: https://docs.mongodb.com/manual/core/tailable-cursors/ 生产者-消费者模式: https://zh.wikipedia.org/

    98040

    一次MongoDB故障的复盘

    ) 深究与排查 主从延迟分析与排查,并通过部分mongo源码佐证推断 通过慢查询定位异常业务 根据迟来的监控指标确认cursor的异常并分析 验证与总结 背景 9月初我们的某客户反馈,部署在其私有云中的...我们知道oplog是没有严格意义上的索引,所以这类游标在第一次建立的时候会比较耗时,持续trace到最后的末尾的时候会处于tailabled和awaitData状态,此时实时trace数据的getmore...同步业务代码在建立cursor时,使用了tailable,awaitData,且noCursorTimeout的定义,致使cursor在业务没有主动close的情况下,将永久存在。...验证2:在tailable,awaitData和noCursorTimeout定义下,服务异常重启会导致cursor不被释放,进而造成cursor堆积。...确认了cursor堆积的原因。 让我们来梳理下这次故障的前因后果。 同步服务中不当的使用了noCursorTimeout的cursor。 该服务异常重启多次造成了primary中cursor的堆积。

    1.3K20

    使用MongoDB开发过程常见错误分析

    本文主要讨论这几个问题: Mongo shell中使用大整数字面量 片键使用自增长字段 程序里游标循环迭代过程中进行长时间的操作 滥用数组类型 滥用upsert更新参数 错误的设计索引 错误的认为复制等于备份...分析: 由于mongo shell实际上是一个js引擎,而在javascript中,基本类型中并没有int或long,所有整数字面量实际上都以双精度浮点数表示(IEEE754格式)。...://docs.mongodb.com/manual/tutorial/iterate-a-cursor/#read-operations-cursors 4 滥用数组类型 问题描述: 在社区的讨论群中...问题描述: 通常,我们开发中遇到的大部分读性能问题,可能都是因为没有为查询、排序操作建立索引,或者建立了错误的索引导致的。...是否可以建立复合索引,复合索引字段如何组织顺序,才能使得复合索引能够覆盖更多的查询需求,满足范围查询的需求,满足排序的需求(通常复合索引中,按照等值查询、排序、范围查询的顺序来组织索引字段,同时结合考虑索引选择性

    2.4K30

    MongoDB Change Stream之一——上手及初体验

    ,比如database/集群粒度; resumeToken的类型从BinData变为十六进制编码的字符串; 新增了对drop/rename/dropDatabase事件的支持; v4.2版本: 加入了更多...如果不希望阻塞shell的话可以采用显示生成游标的方式: cursor = db.changestream.watch([],{maxAwaitTimeMS:60000})cursor.next().....这里以mongo-driver go版本为例,API使用非常简单: // Start Changestream Example 4 pipeline := mongo.Pipeline{...2.如果将fullDocument设置为"updateLookup"时,会获取到已提交到大多数节点的已更新全文档版本,change stream中是通过update操作中的_id来查找到文档当前内容。...4.所有change stream的返回文档也受到 16MB的文档大小限制,考虑到指定了fullDocument选项会将全文档内容包含在返回文档内,可能会导致变更流返回失败。

    10K54

    pymongo.errors.CursorNotFound: Cursor not found

    先从数据库中取得所有数据 db[‘test’].find({},{_id:0}),然后对结果进行for循环 demos = db['demo'].find({},{"_id": 0}) for cursor...in demos:      do_something() 但是当do_something函数耗时过长,在cursor上长时间没有进行操作,引发cursor在mongodb服务端超时 解决方案 1、设置...no_cursor_timeout = True,永不超时,游标连接不会主动关闭,需要手动关闭 demos = db['demo'].find({},{"_id": 0},no_cursor_timeout...= True) for cursor in demos:     do_something() demo.close() # 关闭游标 2、设置batch_size返回文档数,默认应该是20个文档(...记不清了233333),可以设置小一些 #每次只返回一个文档 demos = db['demo'].find({},{"_id": 0}).batch_size(1) for cursor in demos

    1.7K20

    MongoDB 游标

    MongoDB中的游标与关系型数据库中的游标在功能上大同小异。游标相当于C语言的指针,可以定位到某条记录,在MongoDB中,则是文档。...一、mongoDB游标介绍 db.collection.find()方法返回一个游标,对于文档的访问,我们需要进行游标迭代 mongoDB的游标与关系型数据库SQL中的游标类似,可以通过对游标进行...(如限制查询结果数,跳过的结果数等)设置来控制查询结果 游标会消耗内存和相关系统资源,游标使用完后应尽快释放资源 在mongo shell中,如果返回的游标结果集未指定给某个var定义的变量...读取数据 Cursor.Next() 取出游标的下一个文档 关闭游标 cursor.close() 此步骤可省略,通常为自动关闭...c、缺省情况下,游标在十分钟内没有使用,游标自动关闭或者客户端已经迭代完整个游标; d、可以通过cursor.noCursorTimeout()来定义游标超时时间

    83920

    MongoDB RangeDeleter waiting for open cursors

    【问题】 最近发现3.4版本mongo集群实例日志发现疯狂刷如下日志: I SHARDING [RangeDeleter] waiting for open cursors before removing...,也可以通过修改变成同步方式). 2、这个RangeDeleter这个操作被阻塞220天,通常mongo里面cursor只要没有设置非超时参数,基本上都会自动被回收。...3、给出cursor id:100968947595,但没有找到对应语句。...【查找执行语句】 通过如下语句并没有找到相关执行语句,所以也没有办法知道谁干了什么阻塞,只能killcursor. {{ db.currentOp().inprog.map(function (o) {...o.opid, secs: o.secs_running, ns: o.ns, command: o.command }}).filter(Boolean)}} 【处理方案】 备注:执行如下命令后,后台日志错误消失

    37510

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券