2012-11-28 14 views

答えて

21

更新: MongoDB 2.6以降でこれを行うより効率的な方法については、Salvadorのanswerを参照してください。


保存変数に集計結果と、新しいコレクションにそのresultプロパティを挿入します。

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

すべての結果値をメモリに保持する必要があります。 '$ out'に関する問題については、[here](https://jira.mongodb.org/browse/SERVER-3253)を参照してください。 –

+2

また、その結果セットは標準のMongoDB文書サイズ(16MB)に収まる必要があります。 –

+0

@AidanFeldman:集約インライン結果は、最大限のBSONドキュメントサイズに[既に制限されています](http://docs.mongodb.org/manual/core/aggregation/#result)です。 – Stennie

38

モンゴ2.6.0から始めて、あなたは追加の操作なしでネイティブにこれを行うことができます。

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

より詳細な例については、新たな集計演算子$outを確認してください。

P.S.この方法を使用すると、16Mbのサイズに制限されません。

+0

それでは、2.6を前にして何をするのですか?私は16Mbの制限を回避し、2.4のアグリゲーションパイプラインを使用して新しいコレクションを作成する必要があります。 –

+0

もう一度、約16 MBの限界を得る必要があります。 2.4インスタンスで作業していました。 'find()'、 'foreach()'、 'insert()'を使いました。 –

1

result.resultは動作していません。toArray()を試してください。

var result = db.coll.aggregate(...); 
db.bar.insert(result.toArray()); 
関連する問題