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