我想聚合并将结果插入到现有集合中,而不删除该集合。文件似乎表明这不是直接可能的。我觉得很难相信。如何将结果汇总并合并到集合中?
map-reduce功能有'输出模式',包括'合并',它做我想要的。我正在寻找聚合的等价物。
新的$out
聚合阶段支持插入到集合中,但它取代了集合而不是更新它。如果我这样做了,我会(我认为)必须运行另一个map-reduce将它合并到另一个集合中,这看起来效率不高。
我是否缺少某些东西或者是聚合功能中缺少的功能?
我想聚合并将结果插入到现有集合中,而不删除该集合。文件似乎表明这不是直接可能的。我觉得很难相信。如何将结果汇总并合并到集合中?
map-reduce功能有'输出模式',包括'合并',它做我想要的。我正在寻找聚合的等价物。
新的$out
聚合阶段支持插入到集合中,但它取代了集合而不是更新它。如果我这样做了,我会(我认为)必须运行另一个map-reduce将它合并到另一个集合中,这看起来效率不高。
我是否缺少某些东西或者是聚合功能中缺少的功能?
阅读documentation相当准确地回答了这个问题。 Atm mongo无法做到你想做的。
$ out操作在当前数据库中创建一个新的集合(如果尚不存在的话)。该集合在聚合完成之前不可见。如果聚合失败,MongoDB不会创建集合。
如果由$ out操作指定的集合已经存在,那么在完成聚合后,$ out阶段将使用新的结果集合以原子方式替换现有集合。 $ out操作不会更改以前集合中存在的任何索引。如果聚合失败,$ out操作不会更改以前的集合。
如果您没有坚持使用聚合运算符,您可以对集合执行增量式map-reduce。该运算符允许您将结果合并到现有集合中。
下面查看文档:
http://docs.mongodb.org/manual/tutorial/perform-incremental-map-reduce/
我用从聚集输出插入/合并到集合:
db.coll2.insert(
db.coll1.aggregate([]).toArray()
)
谢谢,我看过那个页面(因此链接在我的问题)并描述了解决方法。我问是否有其他机制可以做到这一点。 – Joe
如果你直接在shell中工作,你可以考虑类似这里描述的解决方案http://learnmongo.com/posts/easily-move-documents-between-collections-or-databases/ ,但当然这会不在服务器端执行,但需要获取并重新插入数据 – chk
谢谢,但这会导致向前和向后复制数百万条记录,远远超过16MB! – Joe