1

mongodbコレクションで「update」を実行する際に「$in」を使用する際の専門家の提案が必要です。次に例を示します。

db.users.update({userid: {$in: ['1','2','3']}}, {$inc: {mycounter: 1}}, false, true);

このシナリオでは「$in」を使用する方が良いですか?また、上記のシナリオで「$ in」の配列数/サイズに制限がある場合は、更新ごとに10,000以上のユーザーIDになる可能性があります。

ありがとうございました。

4

1 に答える 1

2

シェルから次の簡単なテストを実行しました。

for(var i = 0; i < 100000; i++) { db.foo.save({ _id : i, x : 1 }) }
db.foo.count(); // should be 100k

query = []
for(var i = 0; i < 10000; i++) { query.push(i) }
db.foo.update( { _id : {$in:query} }, {$inc : {x:1} }, false, true)

db.foo.find({x:2}).count()  // should be 10k

パフォーマンスは妥当で、10kの同時更新を処理できるようです。

アレイのサイズに厳しい制限があるという兆候は見つかりません。ただし、ここでは「合理的な」制限を適用できると思います。100kの配列でのコマンドを発行できたとしても、それを追跡するのは困難です。

一部のドライバでは、一括更新コマンドも使用できます。これは、実行している作業により適している場合があります。

于 2011-02-22T18:48:46.443 に答える