参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.watch()
在本页面
db.collection.
watch
(管道,选项)¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
仅适用于副本集和分片群集
在集合上打开更改流游标。
参数 | 类型 | 描述 |
---|---|---|
pipeline |
数组 | 由以下一个或多个聚合阶段组成的聚合管道:
指定管道以过滤/修改变更事件输出。 |
options |
文献 | 可选的。修改行为的其他选项
如果您未指定管道但正在传递
文档,则必须将空数组传递 |
该options
文档可以包含以下字段和值:
领域 | 类型 | 描述 |
---|---|---|
resumeAfter |
文献 | 可选的。指示 每个变更流事件文档都包括一个恢复令牌作为
|
startAfter |
文献 | 可选的。指示 每个变更流事件文档都包括一个恢复令牌作为
4.2版中的新功能。 |
fullDocument |
串 | 可选的。默认情况下, 设置 |
batchSize |
整型 | 可选的。指定从MongoDB集群的每批响应中返回的更改事件的最大数量。 具有与相同的功能 |
maxAwaitTimeMS |
整型 | 可选的。服务器等待新数据更改以报告更改流游标之前等待的最大时间(以毫秒为单位),然后返回空批处理。 默认为 |
collation |
文献 |
从MongoDB 4.2开始, |
startAtOperationTime |
时间戳记 | 可选的。变更流的起点。如果指定的起点是过去的时间,则必须在操作日志的时间范围内。要查看操作日志的时间范围,请参阅
版本4.0中的新功能。 |
返回值: | 一个游标是保持被打开,以MongoDB的部署的连接保持打开状态,并收集存在。有关变更事件文档的示例,请参见变更事件。 |
---|
也可以看看
db.collection.watch()
可用于副本集和分片群集部署:
db.collection.watch()
在任何数据承载成员上发行。db.collection.watch()
在mongos
实例上发出。majority
支持¶从MongoDB 4.2开始,无论是否支持读关注,更改流都可用"majority"
。也就是说,majority
可以启用阅读关注支持(默认)或禁用
以使用更改流。
在MongoDB 4.0和更早版本中,更改流仅在"majority"
启用了阅读关注支持时才可用(默认)。
db.collection.watch()
仅通知已保留给大多数数据承载成员的数据更改。与MongoDB 驱动程序不同,
mongo
Shell在发生错误后不会自动尝试恢复更改流游标。MongoDB的司机做出一个
尝试自动恢复变换流光标某些错误之后。
db.collection.watch()
使用操作日志中存储的信息来生成更改事件描述并生成与该操作关联的恢复令牌。如果由传递给resumeAfter
or startAfter
选项的恢复令牌标识的操作已经从oplog中删除,db.collection.watch()
则无法恢复更改流。
注意
resumeAfter
在无效事件(例如,集合删除或重命名)关闭流之后,您不能用来恢复更改
流。从MongoDB 4.2开始,您可以使用
startAfter在invalidate事件之后启动新的更改流。恢复令牌
恢复令牌_data
类型取决于MongoDB版本,在某些情况下,取决于更改流打开/恢复时的功能兼容性版本(fcv)(即,fcv值的更改不会影响已打开的更改流的恢复令牌。 ):
MongoDB版本 | 功能兼容版本 | 恢复令牌_data 类型 |
---|---|---|
MongoDB 4.2及更高版本 | “ 4.2”或“ 4.0” | 十六进制编码的字符串(v1 ) |
MongoDB 4.0.7及更高版本 | “ 4.0”或“ 3.6” | 十六进制编码的字符串(v1 ) |
MongoDB 4.0.6及更早版本 | “ 4.0” | 十六进制编码的字符串(v0 ) |
MongoDB 4.0.6及更早版本 | “ 3.6” | BinData |
MongoDB 3.6 | “ 3.6” | BinData |
使用十六进制编码的字符串恢复令牌,您可以对恢复令牌进行比较和排序。
无论fcv值如何,4.0部署都可以使用BinData恢复令牌或十六进制字符串恢复令牌来恢复更改流。这样,4.0部署可以使用在3.6部署的集合上打开的更改流中的恢复令牌。
MongoDB版本中引入的新的恢复令牌格式不能被早期的MongoDB版本使用。
以下操作将针对data.sensors
集合打开更改流游标
:
迭代光标以检查是否有新事件。使用
cursor.isExhausted()
方法,以确保仅环退出时,如果变流光标是封闭的和有剩余的最新一批没有对象:
有关变更流输出的完整文档,请参阅 变更事件。
设置fullDocument
选项以"updateLookup"
指示更改流游标查找与更新更改流事件相关联的文档的最新多数提交版本。
以下操作data.sensors
使用该选项针对集合
打开更改流游标。fullDocument : "updateLookup"
迭代光标以检查是否有新事件。使用
cursor.isExhausted()
方法,以确保仅环退出时,如果变流光标是封闭的和有剩余的最新一批没有对象:
对于任何更新操作,change事件都会在fullDocument
字段中返回文档查找的结果。
有关完整文档更新输出的示例,请参见 change stream update event。
有关变更流输出的完整文档,请参阅 变更事件。
以下操作data.sensors
使用聚合管道仅过滤insert
事件来针对集合打开更改流游标
:
迭代光标以检查是否有新事件。使用
cursor.isExhausted()
方法,以确保仅环退出时,如果变流光标是封闭的和有剩余的最新一批没有对象:
更改流游标仅返回operationType
is为的更改事件
insert
。有关变更流输出的完整文档,请参阅变更事件。
变更流游标返回的每个文档都将恢复令牌作为_id
字段。要恢复更改流,请将_id
您要恢复的更改事件的整个文档传递
给的resumeAfter
或startAfter
选项
watch()
。
以下操作data.sensors
使用恢复令牌恢复针对集合的更改流游标
。假设生成恢复令牌的操作尚未脱离集群的操作日志。
迭代光标以检查是否有新事件。使用
cursor.isExhausted()
方法,以确保仅环退出时,如果变流光标是封闭的和有剩余的最新一批没有对象: