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

时间:2014-01-07 16:17:46

标签: mongodb

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

map-reduce功能有'输出模式',包括'merge',它可以满足我的需要。我正在寻找聚合的等价物。

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

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

4 个答案:

答案 0 :(得分:6)

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

@init
def initialize (project):

    # File is installed relative to sys.prefix
    project.install_file("Lib/site-packages/foo/conf","foo/conf/settings.ini")

答案 1 :(得分:3)

阅读documentation非常准确地回答了这个问题。 Atm mongo无法做你想做的事。

  

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

     

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

答案 2 :(得分:1)

对于最近使用此功能的任何人,此功能都可以从版本4.2中获得,您可以在聚合管道中使用$merge运算符来执行此操作。它必须是管道中的最后阶段。

{ $merge: { into: "myOutput", on: "_id", whenMatched: "replace", whenNotMatched: "insert" } }

答案 3 :(得分:0)

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

请参阅以下文档:

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