问题 如何将结果聚合并合并到集合中?


我想聚合并将结果插入到现有集合中,而不删除该集合。文档似乎表明这不是直接可能的。我觉得很难相信。

map-reduce功能具有'输出模式',包括'merge',它可以满足我的需求。我正在寻找相应的聚合。

新的 $out 聚合阶段支持插入集合,但它替换集合而不是更新它。如果我这样做,我会(我认为)必须运行另一个map-reduce将其合并到另一个集合中,这似乎效率低下。

我是否遗漏了某些内容,或者是聚合功能中缺少的功能?


1781
2018-01-07 16:17


起源



答案:


我使用聚合的输出来插入/合并到集合:

    db.coll2.insert(
      db.coll1.aggregate([]).toArray()
    )

6
2018-05-25 09:55





文件 很准确地回答这个问题。 Atm mongo无法做你想做的事。

$ out操作在当前数据库中创建一个新集合(如果尚不存在)。在聚合完成之前,集合不可见。如果聚合失败,MongoDB不会创建集合。

如果$ out操作指定的集合已经存在,那么在完成聚合后,$ out阶段将使用新的结果集合原子地替换现有集合。 $ out操作不会更改先前集合中存在的任何索引。如果聚合失败,则$ out操作不会对先前的集合进行任何更改。


3
2018-01-07 16:21



谢谢,我确实阅读了该页面(因此我的问题中的链接)并描述了解决方法。我问是否有其他机制可以做到这一点。 - Joe
如果你直接在shell中工作,你可以考虑像这里描述的解决方案 learnmongo.com/posts/... 但当然这不会在服务器端执行,但需要提取和重新插入数据 - chk
谢谢,但这会导致数百万条记录前后复制,远远超过16MB! - Joe
是的,我很确定这不适合你。你的解决方法可能是要走的路。我想......'mongoimport'也没有选择吗? - chk


答案:


我使用聚合的输出来插入/合并到集合:

    db.coll2.insert(
      db.coll1.aggregate([]).toArray()
    )

6
2018-05-25 09:55





文件 很准确地回答这个问题。 Atm mongo无法做你想做的事。

$ out操作在当前数据库中创建一个新集合(如果尚不存在)。在聚合完成之前,集合不可见。如果聚合失败,MongoDB不会创建集合。

如果$ out操作指定的集合已经存在,那么在完成聚合后,$ out阶段将使用新的结果集合原子地替换现有集合。 $ out操作不会更改先前集合中存在的任何索引。如果聚合失败,则$ out操作不会对先前的集合进行任何更改。


3
2018-01-07 16:21



谢谢,我确实阅读了该页面(因此我的问题中的链接)并描述了解决方法。我问是否有其他机制可以做到这一点。 - Joe
如果你直接在shell中工作,你可以考虑像这里描述的解决方案 learnmongo.com/posts/... 但当然这不会在服务器端执行,但需要提取和重新插入数据 - chk
谢谢,但这会导致数百万条记录前后复制,远远超过16MB! - Joe
是的,我很确定这不适合你。你的解决方法可能是要走的路。我想......'mongoimport'也没有选择吗? - chk


如果您没有停留使用聚合运算符,则可以对集合执行增量map-reduce。此运算符允许您将结果合并到现有集合中。

请参阅以下文档:

http://docs.mongodb.org/manual/tutorial/perform-incremental-map-reduce/


0
2018-05-05 19:07