MongoDB:単一のコマンドで複数のドキュメントを更新する方法
次のコード例では1つのドキュメントのみが更新されることに驚いた。
> 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
を4番目の引数としてupdate()
に渡すことでマルチ更新を行います。3番目の引数はupsert引数です。
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
mongodb 2.2+のバージョンでは、一度に複数のドキュメントを更新するには、オプションmultiをtrueに設定する必要があります。
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
mongodb 3.2以降のバージョンでは、新しいメソッドupdateMany()
を使用して、個別のmulti
オプションを必要とせずに、複数のドキュメントを一度に更新することもできます。
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
UPDATE V2.2以降、更新機能は次の形式を取ります:
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
選択した回答は適用されなくなりました。
https://docs.mongodb.com/manual/reference/method/db.collection.update/
Mongoバージョン> 2.2の場合、フィールドmultiを追加してtrueに設定します
db.Collection.update({query},
{$set: {field1: "f1", field2: "f2"}},
{multi: true })
より良いインターフェースでこれを行う方法を作成しました。
db.collection.find({ ... }).update({ ... })
-マルチ更新db.collection.find({ ... }).replace({ ... })
-単一の置換db.collection.find({ ... }).upsert({ ... })
-単一のアップサートdb.collection.find({ ... }).remove()
-マルチ削除
制限を適用、スキップ、更新を並べ替え、事前に連鎖させることで削除することもできます。
興味のある方は、 Mongo-Hacker をご覧ください
MongoDBクライアントで、次を入力します。
db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
バージョン3.2の新機能
パラメータ::
{}: select all records updated
キーワード引数multi
は使用されません
MongoDBは、更新コマンドを発行しているときにクエリ条件に一致する一致するドキュメントを1つだけ検出します。条件に一致するドキュメントがさらに無視されても、最初に一致するドキュメントが更新されます。
これを克服するために、更新ステートメントで「MULTI」オプションを指定できます。つまり、クエリ条件に一致するすべてのドキュメントを更新します。コレクション内のすべてのドキュメントをスキャンして、基準に一致するドキュメントを見つけて更新します。
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
私は同じ問題を抱えていました、そして私は解決策を見つけました、そしてそれは魅力のように機能します
このようにフラグmultiをtrueに設定するだけです:
db.Collection.update(
{_id_receiver: id_receiver},
{$set: {is_showed: true}},
{multi: true} /* --> multiple update */
, function (err, updated) {...});
私はそれが役立つことを願っています:)
使用できます。
Model.update({
'type': "newuser"
}, {
$set: {
email: "abc@gmail.com",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
}) `
Mongodb 3.2以降のバージョンでは、updateMany()メソッドを使用して複数のドキュメントを更新できます。
http://answerexpress.blogspot.com/2018/09/mongodb-how-to-update-multiple.html
Mongodbのすべての最新バージョンpdateMany()は正常に動作しています
db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});