首页 > 解决方案 > MongoDB Change Streams 读取过去的更改

问题描述

我想读取数据库中集合的更改。现在我在直接使用 oplog 和Change Streams之间进行选择。我对 oplog Change Streams 能力几乎没有疑问

  1. 如何使用 Change Streams 从 oplog 一开始就开始读取更改?

使用 oplog 我可以find()在具有零时间戳的 oplog 集合上使用,但使用 Change Streams 我只能传递resumeAfterstartAfter令牌。当我没有指定光标选项时,它会从当前时刻开始读取更改,但在第一次运行时,我需要从头开始。

  1. 如果我的更改阅读器会落后于 oplog 并 resumeAfter变得过时怎么办?

文档

如果时间戳是过去的,oplog 必须有足够的历史来定位与令牌或时间戳关联的操作。

如何正确处理这种情况?

  1. 现在我需要从单个集合中读取更改,但将来我可能需要从多个集合中读取更改

使用 oplog,我可以扩展查找过滤器并继续使用状态中的时间戳。我可以对 Change Streams 做同样的事情吗?

标签: mongodbchangestream

解决方案


您可以使用startAtOperationTime 选项来指定更改流的开始时间。开始时间必须在 oplog 窗口内。

应该可以从令牌引用的点开始更改流,该点是过去的,但是您需要之前从更改流中获取令牌。没有 API 可以在客户端从头开始创建令牌。


推荐阅读