0

次のような大量の(数百万以上の)ドキュメントのコレクションがあるとします。

{ _id : ObjectId, "a" : 3, "b" : 5 }

これらのドキュメントをサーバー上で直接処理し、結果を同じコレクション内の各ドキュメントに追加する最も効率的な方法は何ですか?たとえば、c値がに等しいキーを追加しますa+b

{ _id : ObjectId, "a" : 3, "b" : 5, "c" : 8 }

シェルでこれを実行したいと思います。

dbfind().forEach()とシェルの間の転送に時間がかかるmapReduce()ようで、オブジェクトのグループを集約データに処理することを目的としているようです(誤解されているかもしれませんが)。

編集:(クライアントでカーソルを使用する以外に)ブロックされないソリューションがあれば、それを好みます...

4

2 に答える 2

2

db.eval()のMongoDBドキュメントから:

「db.eval()は、データベースサーバーで(JavaScriptで記述された)関数を評価するために使用されます。これは、大量のデータに軽く触れる必要がある場合に役立ちます。そのシナリオでは、データのネットワーク転送がボトルネックになる可能性があります。 「」

ドキュメントには、あなたがやろうとしていることと非常によく似た使用方法の例があります。

于 2012-09-11T20:53:54.953 に答える
1

forEach最良の選択肢です。レイテンシーを減らすために、サーバー上で(シェルから)実行します。

于 2012-09-11T19:16:16.440 に答える