【发布时间】: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”集合上侦听这些事件是否有效? "
【问题讨论】: