Node.js 如何检测MongoDB/Mongoose中对集合所做的所有更改(包括删除)?

Node.js 如何检测MongoDB/Mongoose中对集合所做的所有更改(包括删除)?,node.js,mongodb,mongoose,changestream,mongoose-middleware,Node.js,Mongodb,Mongoose,Changestream,Mongoose Middleware,我有一个通过mongoose使用MongoDB的应用程序。在应用程序上有一个名为通知的集合。我希望在该集合中的每次更改(包括删除文档)时都进行检测,并采取适当的操作。我读到: 与Model.remove()类似,此函数(Model.findOneAndDelete())不执行 不触发前('remove')或后('remove')挂钩 然后我读到: 更改流为您提供了一种收听所有插入内容的方式 更新您的MongoDB数据库。请注意,更改流 除非连接到MongoDB副本集,否则无法工作 流是否考虑删除

我有一个通过mongoose使用MongoDB的应用程序。在应用程序上有一个名为
通知的集合。我希望在该集合中的每次更改(包括删除文档)时都进行检测,并采取适当的操作。我读到:

与Model.remove()类似,此函数(Model.findOneAndDelete())不执行 不触发前('remove')或后('remove')挂钩

然后我读到:

更改流为您提供了一种收听所有插入内容的方式 更新您的MongoDB数据库。请注意,更改流 除非连接到MongoDB副本集,否则无法工作

流是否考虑删除作为更新?如何侦听数据库中的所有更改,包括删除文档?

更改流允许应用程序访问实时数据更改,而不必承担跟踪oplog的复杂性和风险。应用程序可以使用更改流订阅单个集合、数据库或整个部署上的所有数据更改,并立即对其作出反应。因为变更流使用聚合框架,所以应用程序还可以过滤特定变更或随意转换通知

少数条件:

  • 必须是一个副本集(即使是单节点副本集也可以),因为单机版上没有OpLog
  • 变化意味着什么;删除、更新、插入。所以,是的,一旦你订阅,你将获得所有这些活动
  • 读取不是更改事件。显然
  • 请确保将简历令牌保留在某个位置。因此,您可以从中断的位置继续,例如,在某个时刻,等待更改事件的应用程序很可能会崩溃/失败/抛出异常。因此,理想情况下,您希望回到过去,从上次成功的变更事件开始继续
  • 它在应用程序范围内运行,这意味着代码是由您使用所选语言编写的,您将收听这些事件。因此,您负责管理和维护变更流订阅服务器的状态。从MongoDB的角度看,它只是一个光标

  • 刚刚看到mongodb中的change streams监听删除事件。谢谢。然而,我不理解第4点和第5点。你说的简历是什么意思?我在恢复什么?你所说的应用范围是什么意思?您所说的变更流状态是什么意思?我认为这就像订阅和等待更改事件一样简单。我添加了更多的解释