【问题标题】:Collections created using MongoDB's aggregation $out option are not observable via Meteor?使用 MongoDB 的聚合 $out 选项创建的集合不能通过 Meteor 观察到?
【发布时间】:2015-08-13 19:01:52
【问题描述】:

创建的集合 aggregate([$out]) 与 insert() 有什么不同?

在此处查看问题演示:meteor-aggregation-issue.meteor.com

看起来像 Mongo 的 aggregate() 使用 $out 时,以某种方式产生与相同数据的 insert() 不同的集合。我只是猜测,因为我的行为非常不同。

我正在 Meteor 中对此进行测试,并且应用程序无法观察到使用 aggregate([$out]) 创建的集合。我不确定为什么会这样,因为集合在 Mongo 控制台中看起来不错。

这是可以重现错误的应用程序: https://github.com/keyscores/meteor-aggregation-issue 只需克隆并 cd 到应用程序,然后运行 ​​>meteor

编辑

来自我在 Mongo 问题跟踪器中的帖子:https://jira.mongodb.org/browse/SERVER-19958 查理斯旺森:

" 具有 $out 阶段的聚合命令将在聚合管道运行时创建一个临时集合,然后,一旦管道完成,它将将该临时集合重命名为 $out 阶段中指定的名称。例如如果你跑了

db.foo.aggregate([{$out: 'bar'}]);

它会创建一个临时的 bar.tmp.agg_out 集合,并将管道中的所有结果插入到该集合中。当管道完成时,它会将 bar.tmp.agg_out 重命名为 bar,保留现有 bar 集合的所有索引和选项(如果有)。

这应该可以解释您所看到的行为。如果我正确理解您的代码,Meteor 提供了一个框架来让您监听事件,例如将文档插入到集合中,并且当您使用 aggregate() 命令时它不会调用回调?作为临时解决方法,您能否验证在“.tmp.agg_out”集合上侦听这些事件是否有效? "

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    我假设如果您使用 aggregate() 函数,您安装了一个包 such as this one,或者为您的应用添加了一个用于 aggregate() 函数的管道。

    您的集合不可观察的原因是它不是反应性的。据我所知,您无法观察到非反应性数据源。

    看看这个answer,当我遇到同样的问题时,这是我的解决方法。根据您的情况,您还可以使用collection hooks 准备一个简单的Collection.find() 请求。

    【讨论】:

    • 集合不响应的原因是什么?如果您查看我的示例 (github.com/keyscores/meteor-aggregation-issue),当我从 mongo 控制台更新它时,该集合是反应性的。只是不是来自聚合()
    • 我不能给你一个明确的答案。我只能说我经历了同样的事情(控制台更新工作/聚合不工作),但如果你认为aggregate() 不是 Meteor 的内置功能(即没有为它实现反应性),这是有道理的一旦你的聚合完成,你的客户只是在修改一个已经发布的表。
    • 谢谢Billybobbonnet,正如你所说,奇怪的是同一个集合可以通过控制台更新,并获得反应性更新。聚合()与插入()有何不同?
    • 考虑延迟补偿。您的 minimongo 集合在您的实际集合之前更新。如果本机驱动程序允许/拒绝规则不允许查询,则会回滚更改。因此,您可以在控制台中更改集合是有道理的。这是一个客户驱动的变化,所以它是为他更新的,但不是为其他客户(已经订阅)我假设..再一次,我认为你可以使用这个答案中描述的技术发布几乎任何东西:stackoverflow.com/a/30813050/3793161。这比聚合更棘手,但更灵活恕我直言。
    • 对不起,我不是指浏览器控制台。我的意思是 mongo 控制台本身。 >流星蒙戈。我的意思是:直接在 mongo 管理控制台上使用 insert() 时,相同的集合将反应性地出现。这是在流星循环之外。即便如此,它也是被动的。我不确定为什么 $out 与 insert() 有什么不同
    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2016-03-30
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多