如何解决MongoDB聚合管道输出更改流
我正在使用MongoDB的聚合管道来生成一个新集合B,其中包含来自集合A的聚合结果。为此,我使用了$out阶段。每次运行聚合管道时,可能会添加新文档,可能会更新某些文档,而有些则删除了。
我现在想对汇总集合B进行更改,以便在汇总产生与上一个集合不同的结果(即至少一个插入/更新/删除)时得到通知。
但是,如果我使用$out
阶段,则每次执行都会重新创建该集合,并且我得到rename
和invalidate
的更改,然后关闭流。我可以使用带有恢复令牌的start_after
再次打开流,但是没有收到有关更改的通知(rename
和invalidate
)。
我尝试使用$merge来避免重新创建集合。更改流按预期工作,但我不再能够从集合B中删除旧文档。
是否有一种方法可以使我的用例工作(即,聚合管道的结果是集合的新内容+获取更改通知,以便从先前的集合内容中进行插入/删除/更新)?
解决方法
$ out不会将新结果集与集合的先前内容进行对比。它将删除先前的内容并插入新文档。
因此,在MongoDB中,没有任何东西知道哪些文档已添加到B,哪些文档已删除。我看不到如何通过B上的更改流来获取此信息。
恐怕您需要提出另一个解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。