db.collection.find().limit(10)
のようなものを実装するにはどうすればよいですか?mongodbの更新文書数を制限する方法
今私はdb.collection.find().limit()
でドキュメントを取得してからそれらを更新するような、本当に嫌なことを使用しています。
一般に、与えられたレコード数を返し、それぞれのフィールドを1つずつ変更したいと考えています。
ありがとうございました。
db.collection.find().limit(10)
のようなものを実装するにはどうすればよいですか?mongodbの更新文書数を制限する方法
今私はdb.collection.find().limit()
でドキュメントを取得してからそれらを更新するような、本当に嫌なことを使用しています。
一般に、与えられたレコード数を返し、それぞれのフィールドを1つずつ変更したいと考えています。
ありがとうございました。
残念ながらAFAIKを実行する唯一の方法は、あなたの回避策です。 (true
の場合)すべての一致を更新するか、または最初の一致を更新する(false
の場合)ブール値フラグmulti
があります。
更新プログラムに制限を適用する目的がわかりません(SQLでは可能ではありません)。 ロブスターworte:更新は、更新基準に一致する1つの文書またはすべての文書でのみ機能します。そのため、以前のクエリに基づいて要件をニーズに合わせるか、または1つずつ更新する必要があります。
を使用できは両方のアプローチを自分のデータでテストし、find()allとそれからupdate()はfind_and_modify()の方がはるかに高速です。これを行う方法の1つです。 – awsum
これは実際には当てはまりませんが、もちろんSQLの更新に制限を加えることができます。例: "UPDATEテーブルSET x = 1 WHERE x = 0 LIMIT 10" –
:
db.collection.find().limit(NUMBER_OF_ITEMS_YOU_WANT_TO_UPDATE).forEach(
function (e) {
e.fieldToChange = "blah";
....
db.collection.save(e);
}
);
は(forEachのコードのためのクレジット:MongoDB: Updating documents using data from the same document)
これが何をするかだけで、指定したエントリの数を変更です。だから、あなたはあなたがしても、残りの半分を作りたい場合たとえば、あなたが
db.collection.find().limit(db.collection.count()/2).forEach(
function (e) {
e.newField = 1;
db.collection.save(e);
}
);
に置くことができ、「コレクション」内のエントリの半分だけに値1を持つ「ニューフィールド」と呼ばれるフィールドを追加したい場合「ニューフィールド」を持っていますが、値が2で、あなたはニューフィールドが存在しない状態でアップデートを行うことができます。答えは更新するドキュメントの数を制限する方法はまだありません述べたよう
db.collection.update({ newField : { $exists : false } }, { $set : { newField : 2 } }, {multi : true});
ニース、Mongoシェルでも動作します –
(または削除)を値> 1に変更します。
db.collection.find(<condition>).limit(<limit>).forEach(function(doc){db.collection.update({_id:doc._id},{<your update>})})
すべてのオブジェクトに対して反復処理を行い、個別に更新するソリューションは非常に遅いです。
$in
を使用してそれらをすべて取得して同時に更新する方が効率的です。
ids = People.where(firstname: 'Pablo').limit(10000).only(:_id).to_a.map(&:id)
People.in(_id: ids).update_all(lastname: 'Cantero')
クエリはMongoidを使用して記述されますが、Mongo Shellでも簡単に書き換えられます。
forEach
を使用すると、各文書を個別に更新するのが遅くなります。あなたはFYI
ids = db.collection.find(<condition>).limit(<limit>).map(
function(doc) {
return doc._id;
}
);
db.collection.updateMany({_id: {$in: ids}}, <update>})
を使用して大量の文書を更新することができますがあり、このためのオープンチケット(2010年以来、V1.6.0)https://jira.mongodb.org/browse/SERVER-1599ですが、スケジュールされていませんすぐにリリースする予定です。 – zamnuts