Python:更新方法について複数の文書を単一のコマンド?
質問
何より驚いたことは、以下の例のコードのみの更新を単一の文:
> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});
> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});
> db.test.find({"test":"success!"}).count();
1
思いでループを通じて、アップデートで彼らはすべての変更がものすごく効率が悪い。ありそうです。
解決
マルチ更新を追加し、最近では、開発リリース(1.1.3).シェルからんマルチの更新により通 true
としての引数 update()
, の第三引数のupsert引数:
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
のためのバージョンのpython2.2+設定する必要がありますのオプション多true更新する複数の文書です。
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
のためのバージョンのpython3.2+も利用できます新しい方法 updateMany()
更に複数の書類を一度にする必要はなく、個別の multi
オプションです。
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
他のヒント
の UPDATE、更新機能は、以下の形式をとる:の
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
選択した答えは、もはや適用されます。
https://docs.mongodb.com/manual/reference /method/db.collection.update/する
のための Mongoのバージョン> 2.2 を、マルチフィールドを追加し、これをtrueに設定します。
db.Collection.update({query},
{$set: {field1: "f1", field2: "f2"}},
{multi: true })
私がないということのより良いインタフェース。
db.collection.find({ ... }).update({ ... })
--マルチ更新db.collection.find({ ... }).replace({ ... })
--シングル交換db.collection.find({ ... }).upsert({ ... })
--シングルupsertdb.collection.find({ ... }).remove()
--マルチ削除
お申込みが可能となります限界を飛ばし、選手の更新および削除しますにチェーン接続しています。
ご興味のある方は、チェックアウト もんごういか-ハッカー
MongoDBのクライアントには、次のように入力します。
db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
バージョン3.2の新
のparams ::
{}: select all records updated
キーワード引数multi
が取られていない
MongoDBは、ドキュメントが最初に無視されます基準に一致する複数の文書が存在する場合であっても、更新され、たまたま一致した方updateコマンドを発行しているとき、クエリ基準に一致する唯一の一致する文書を検索します。
ので、これを克服するために、我々は、クエリ条件に一致するすべてのそれらのdocumnetsを更新する意味、あなたの更新文で「MULTI」オプションを指定することができます。基準や更新に一致するものを見つけるのコレクション内のすべてのdocumnetsをスキャンします:
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
私は同じ問題を抱えていた、と私は解決策を見つけ、それが
魔法のように動作しますちょうどこのような真のマルチフラグを設定します:
db.Collection.update(
{_id_receiver: id_receiver},
{$set: {is_showed: true}},
{multi: true} /* --> multiple update */
, function (err, updated) {...});
私はそれが役に立てば幸い:)
あなたがuse.`ことができます。
Model.update({
'type': "newuser"
}, {
$set: {
email: "abc@gmail.com",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
}) `
のMongoDBのすべての最新バージョンの updateMany()は正常に動作している
db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});
おかげでこれを共有するため、私は2.6.7で使用し、次のクエリだけで働いていた、
すべてのドキュメントについて:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})
シングルdocに関するます:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})