参考 > 参考 > mongo Shell方法 > 数据库方法 > db.watch()
在本页面
db.
watch
(管道,选项)¶仅适用于副本集和分片群集
版本4.0中的新功能:要求featureCompatibilityVersion
(fCV)设置为
"4.0"
或更高。有关fCV的更多信息,请参见
setFeatureCompatibilityVersion
。
打开更改流游标,以供数据库报告其所有非system
集合。
参数 | 类型 | 描述 |
---|---|---|
pipeline |
数组 | 由以下一个或多个聚合阶段组成的聚合管道:
指定管道以过滤/修改变更事件输出。 |
options |
文献 | 可选的。修改行为的其他选项
如果您未指定管道但正在传递
文档,则必须将空数组传递 |
该options
文档可以包含以下字段和值:
领域 | 类型 | 描述 |
---|---|---|
resumeAfter |
文献 | 可选的。指示 每个变更流事件文档都包括一个恢复令牌作为
|
startAfter |
文献 | 可选的。指示 每个变更流事件文档都包括一个恢复令牌作为
4.2版中的新功能。 |
fullDocument |
串 | 可选的。默认情况下, 设置 |
batchSize |
整型 | 可选的。指定从MongoDB集群的每批响应中返回的更改事件的最大数量。 具有与相同的功能 |
maxAwaitTimeMS |
整型 | 可选的。服务器等待新数据更改以报告更改流游标之前等待的最大时间(以毫秒为单位),然后返回空批处理。 默认为 |
collation |
文献 |
如果省略,则默认为 |
startAtOperationTime |
时间戳记 | 可选的。变更流的起点。如果指定的起点是过去的时间,则必须在操作日志的时间范围内。要查看操作日志的时间范围,请参阅
|
返回值: | 将光标放在更改事件文档上。有关变更事件文档的示例,请参见变更事件。 |
---|
也可以看看
majority
支持¶从MongoDB 4.2开始,无论是否支持读关注,更改流都可用"majority"
。也就是说,majority
可以启用阅读关注支持(默认)或禁用
以使用更改流。
在MongoDB 4.0和更早版本中,更改流仅在"majority"
启用了阅读关注支持时才可用(默认)。
db.watch()
在上admin
,local
或
config
数据库。db.watch()
仅通知已保留给大多数数据承载成员的数据更改。db.watch()
为不存在的数据库运行。但是,一旦创建数据库并删除数据库,更改流游标就会关闭。与MongoDB 驱动程序不同,
mongo
Shell在发生错误后不会自动尝试恢复更改流游标。MongoDB的司机做出一个
尝试自动恢复变换流光标某些错误之后。
db.watch()
使用操作日志中存储的信息来生成更改事件描述并生成与该操作关联的恢复令牌。如果由传递给resumeAfter
or startAfter
选项的恢复令牌标识的操作已经从oplog中删除,db.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版本使用。
mongo
Shell中的以下操作在hr
数据库上打开更改流游标。返回的游标报告system
该数据库中所有非集合的数据更改。
迭代光标以检查是否有新事件。使用
cursor.isExhausted()
方法,以确保仅环退出时,如果变流光标是封闭的和有剩余的最新一批没有对象:
有关变更流输出的完整文档,请参阅 变更事件。