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

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.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

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.7K21

【翻译】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.1K31

【翻译】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.2K60

【翻译】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.4K90

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/

93040

一次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。 该服务异常重启多次造成了primarycursor的堆积。

1.3K20

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选项会将全文档内容包含在返回文档内,可能会导致变更流返回失败。

8.7K54

使用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

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.6K20

MongoDB 游标

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

80620

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)}} 【处理方案】 备注:执行如下命令后,后台日志错误消失

34310
领券