如何检测对 MongoDB/Mongoose 中的集合所做的所有更改,包括删除?

How to detect all changes,including deletion, made to a collection in MongoDB/Mongoose?

我有一个通过猫鼬使用 MongoDB 的应用程序。在应用程序上有一个名为 Notifications 的集合。我想检测每次该集合发生变化(包括删除文档)并采取适当的措施。我读过here

Like Model.remove(), this function (Model.findOneAndDelete(), Model.deleteOne()), does not trigger pre('remove') or post('remove') hooks.

然后我读到 here

Change streams provide a way for you to listen to all inserts and updates going through your MongoDB database. Note that change streams do not work unless you're connected to a MongoDB replica set.

更改流是否将删除视为更新?如何监听数据库中的所有更改,包括文档的删除?

更改流允许应用程序访问实时数据更改,而没有拖尾 oplog 的复杂性和风险。应用程序可以使用更改流来订阅单个集合、数据库或整个部署中的所有数据更改,并立即对它们做出反应。由于更改流使用聚合框架,应用程序还可以过滤特定更改或随意转换通知。

条件不多:

  1. 必须是副本集(即使是单节点副本集也可以),因为单机没有OpLog。
  2. 改变意思;删除、更新、插入。所以是的,一旦您订阅,您将获得所有这些事件
  3. 读取不是更改事件。很明显!
  4. 确保将简历令牌保存在某处。所以你可以从你离开的地方继续,例如很可能在某个时候您正在等待更改事件的应用程序将 crash/fail/throw 异常。所以理想情况下,您希望回到过去并从上次成功的更改事件继续。
  5. 它在应用程序范围内运行,这意味着代码是由您使用您选择的语言编写的,将侦听这些事件。因此,您负责管理和维护 Change Stream 订阅者的状态。从MongoDB这边看,它只是一个游标。

我认为删除不属于更新。 'updates' 表示创建、更新或替换。所以软删除是检测更改流删除的唯一方法