【问题标题】:MongoDB aggregation pipeline output change streamMongoDB聚合管道输出变化流
【发布时间】:2020-09-18 11:37:13
【问题描述】:

我正在使用 MongoDB 的聚合管道生成一个新的集合 B,其中包含来自集合 A 的聚合结果。为此,我使用了$out 阶段。每次我运行聚合管道时,都可能会添加新文档,可能会更新一些文档,也可能会删除一些文档。

我现在想要对聚合集合 B 进行更改流,以便在聚合生成与前一个结果不同的结果时收到通知(即至少一个插入/更新/删除)。

但是,如果我使用$out 阶段,则每次执行时都会重新创建集合,并且我会得到renameinvalidate 的更改,然后关闭流。我可以使用start_after 和恢复令牌再次打开流,但我没有收到更改通知(renameinvalidate)。

我尝试使用$merge 来避免重新创建集合。更改流按预期工作,但我无法再从集合 B 中删除旧文档。

有没有办法让我的用例工作(即聚合管道的结果是集合的新内容 + 从以前的集合内容中获取插入/删除/更新的更改通知)?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    $out 不会区分新结果集与集合的先前内容。它会删除以前的内容并插入新文档。

    因此,MongoDB 中没有任何东西知道哪些文档被添加到 B 以及哪些被删除。我不知道您如何能够通过 B 上的更改流获取此信息。

    恐怕你需要想出另一个解决方案。

    【讨论】:

    • 这也是我的结论。感谢您确认我没有遗漏任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2020-09-20
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多