2012-11-28 136 views

回答

21

更新:看到薩爾瓦多的answer爲更有效的方式來做到這一點在MongoDB 2.6 +。


保存聚合結果在一個變量,然後將其result財產成一個新的集合:

var result = db.foo.aggregate(...); 
db.bar.insert(result.result); 
+2

只有無賴者需要將所有結果值保存在內存中。有關'$ out'的問題,請參見[這裏](https://jira.mongodb.org/browse/SERVER-3253)。 –

+2

此外,該結果集需要符合標準的MongoDB文檔大小(16MB)。 –

+0

@AidanFeldman:聚合內聯結果[已限制](http://docs.mongodb.org/manual/core/aggregation/#result)爲最大BSON文檔大小。 – Stennie

38

開始蒙戈2.6.0你可以原生做到這一點,沒有任何額外的操作。

db.<collection>.aggregate([ 
    { <operation> }, 
    { <operation> }, 
    ..., 
    { $out : "<output-collection>" } 
]) 

查看新的聚合運算符$out以獲取更詳細的示例。

P.S.使用這種方式,你不限於16Mb的大小。

+0

那麼2.6之前該怎麼做?我需要解決16Mb的限制,並且仍然使用2.4上的聚合管道創建新的集合。 –

+0

同樣,需要獲得16mb左右的限制。正在研究2.4實例。使用'find()','foreach()','insert()'成功。 –

1

result.result不再工作,請嘗試toArray()。

var result = db.coll.aggregate(...); 
db.bar.insert(result.toArray());