MongoDBは、ドキュメントを更新するためのさまざまな方法を提供します。使用する方法は、更新を実行する方法によって異なります。
この記事では、MongoDBでドキュメントを更新する4つの方法を紹介します。
db.collection.updateOne()
方法
db.collection.updateOne()
メソッドは、その名前が約束するとおりに機能します。1つのドキュメントを更新します。
pets
というコレクションがあるとします。 次のドキュメントが含まれています:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
次のように1つのドキュメントを更新できます:
db.pets.updateOne(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
結果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
2つのドキュメントがフィルター基準(type: "Dog"
である基準)に一致する場合でも、1つのドキュメントのみが更新されました。 。
次のように結果を確認できます:
db.pets.find()
結果:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
これで、最初のドキュメントにtype
が追加されました Cow
の Dog
の代わりに 、ただし、2番目のドキュメントは、フィルタリング基準にも一致していても、影響を受けませんでした。
db.collection.updateMany()
方法
db.collection.updateMany()
メソッドは、コレクションに指定されたフィルターに一致するすべてのドキュメントを更新します。
元のコレクションドキュメントを使用しましょう:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
ここでも、2つのドキュメントにDog
があることがわかります。 type
として 。
次のように、両方のドキュメントを一度に更新できます:
db.pets.updateMany(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
結果:
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
これは、2つのドキュメントが一致し、2つが更新されたことを示しています。
コレクションを確認できます:
db.pets.find()
結果:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
db.collection.update()
方法
db.collection.update()
メソッドは、コレクション内の単一のドキュメントまたは複数のドキュメントを更新できます。
デフォルトでは、1つのドキュメントのみが更新されます。ただし、multi: true
の場合 を指定すると、クエリ条件に一致するすべてのドキュメントが更新されます。
単一のドキュメントを更新する
元のドキュメントのコレクションをもう一度使用してみましょう:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
次のように1つのドキュメントを更新できます:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
結果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
1つのドキュメントのみが更新されました。これは、コレクションをクエリするときに確認されます。
db.pets.find()
結果:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
複数のドキュメントを更新する
もう一度元のドキュメントコレクションに戻りましょう:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
次に、multi: true
を追加します クエリ条件に一致するすべてのドキュメントを更新するための更新操作:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } },
{ multi: true }
)
結果:
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
そのため、今回は2つのドキュメントが一致し、更新されました。
コレクションをもう一度見てみましょう:
db.pets.find()
結果:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Cow" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
予想どおり、両方のドキュメントにtype
が追加されました Cow
の 。
db.collection.replaceOne()
方法
db.collection.replaceOne()
メソッドは、フィルターに基づいてコレクション内の単一のドキュメントを置き換えます。
再び元のコレクションを使用する:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
db.collection.replaceOne()
を使用するとどうなるか見てみましょう それに対する方法。
db.pets.replaceOne(
{ type: "Dog" },
{ type: "Cow" }
)
結果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
1つのドキュメントが更新されました。
見てみましょう。
db.pets.find()
結果:
{ "_id" : 1, "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
今回は、ドキュメント全体が新しいドキュメントに置き換えられました(_id
を除く) 分野)。
このメソッドは、ドキュメント全体を置き換えます(_id
を除く) フィールド)。
アップサート
上記のすべてのメソッドは、upsert
を受け入れます アップサート操作を実行できるようにする引数。
upsert: true
の場合 、クエリ条件に一致する場合はドキュメントが更新されますが、一致しない場合は新しいドキュメントが挿入されます。
例:
db.pets.updateOne(
{ name: "Wag" },
{ $set: { type: "Cow" } },
{ upsert: true }
)
結果:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe1d5aad991410169410165") }
この場合、一致するものがなかったため、ドキュメントがアップサートされました。
コレクションを確認しましょう。
db.pets.find()
結果:
{ "_id" : 1, "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" } { "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }