1. ホーム
  2. mongodb

[解決済み] MongoDB: 1つのコマンドで複数のドキュメントを更新するには?

2022-03-01 16:10:07

質問

以下のサンプルコードでは、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!"}})