2014-01-07 148 views
10

我想聚合並將結果插入到現有集合中,而不刪除該集合。文件似乎表明這不是直接可能的。我覺得很難相信。如何將結果彙總併合併到集合中?

map-reduce功能有'輸出模式',包括'合併',它做我想要的。我正在尋找聚合的等價物。

新的$out聚合階段支持插入到集合中,但它取代了集合而不是更新它。如果我這樣做了,我會(我認爲)必須運行另一個map-reduce將它合併到另一個集合中,這看起來效率不高。

我是否缺少某些東西或者是聚合功能中缺少的功能?

回答

3

閱讀documentation相當準確地回答了這個問題。 Atm mongo無法做到你想做的。

$ out操作在當前數據庫中創建一個新的集合(如果尚不存在的話)。該集合在聚合完成之前不可見。如果聚合失敗,MongoDB不會創建集合。

如果由$ out操作指定的集合已經存在,那麼在完成聚合後,$ out階段將使用新的結果集合以原子方式替換現有集合。 $ out操作不會更改以前集合中存在的任何索引。如果聚合失敗,$ out操作不會更改以前的集合。

+0

謝謝,我看過那個頁面(因此鏈接在我的問題)並描述瞭解決方法。我問是否有其他機制可以做到這一點。 – Joe

+0

如果你直接在shell中工作,你可以考慮類似這裏描述的解決方案http://learnmongo.com/posts/easily-move-documents-between-collections-or-databases/ ,但當然這會不在服務器端執行,但需要獲取並重新插入數據 – chk

+0

謝謝,但這會導致向前和向後複製數百萬條記錄,遠遠超過16MB! – Joe

3

我用從聚集輸出插入/合併到集合:

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