MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでドキュメントを削除せずに1件だけ更新する方法(updateOneの使い方)

MongoDBのコレクション内で1つのドキュメントだけを更新したい場合は、updateOne()メソッドを使用します。updateOne()は、指定したフィルター条件に一致した最初の1件のドキュメントのみを更新するメソッドです。既存のデータを削除することなく、特定のフィールドだけを安全に書き換えられます。

サンプルコレクションの作成

まず、動作確認用にドキュメントを含むコレクションを作成します。

> db.demo495.insertOne({"FirstName":"Chris","Age":19});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e84adfeb0f3fa88e22790ca")
}
> db.demo495.insertOne({"FirstName":"David","Age":21});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e84ae05b0f3fa88e22790cb")
}
> db.demo495.insertOne({"FirstName":"Bob","Age":26});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e84ae0eb0f3fa88e22790cc")
}
> db.demo495.insertOne({"FirstName":"John","Age":22});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e84ae15b0f3fa88e22790cd")
}

find()ですべてのドキュメントを表示する

find()メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。

> db.demo495.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e84adfeb0f3fa88e22790ca"), "FirstName" : "Chris", "Age" : 19 }
{ "_id" : ObjectId("5e84ae05b0f3fa88e22790cb"), "FirstName" : "David", "Age" : 21 }
{ "_id" : ObjectId("5e84ae0eb0f3fa88e22790cc"), "FirstName" : "Bob", "Age" : 26 }
{ "_id" : ObjectId("5e84ae15b0f3fa88e22790cd"), "FirstName" : "John", "Age" : 22 }

updateOne()で1件のドキュメントのみを更新する

以下は、updateOne()を使用して1つのドキュメントだけを更新するクエリの例です。ここでは、「FirstName」が「David」であるドキュメントを対象に、「Age」を23に変更しています。

> db.demo495.updateOne({"FirstName":"David"},{$set: {"Age":23} });
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

実行結果にはmatchedCount(フィルターに一致したドキュメント数)とmodifiedCount(実際に更新されたドキュメント数)が表示されます。どちらも「1」となっていることから、1件だけが正しく更新されたことがわかります。

もう一度find()でコレクション全体を表示して、更新結果を確認してみましょう。

> db.demo495.find();

出力は以下のとおりです。「David」のAgeだけが21から23に変わっており、他のドキュメントには影響していません。

{ "_id" : ObjectId("5e84adfeb0f3fa88e22790ca"), "FirstName" : "Chris", "Age" : 19 }
{ "_id" : ObjectId("5e84ae05b0f3fa88e22790cb"), "FirstName" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e84ae0eb0f3fa88e22790cc"), "FirstName" : "Bob", "Age" : 26 }
{ "_id" : ObjectId("5e84ae15b0f3fa88e22790cd"), "FirstName" : "John", "Age" : 22 }

まとめ

updateOne()を使えば、フィルター条件に一致した最初の1件のドキュメントのみを、他のデータを削除・変更することなくピンポイントで更新できます。複数件を一括で更新したい場合に誤って使わないよう、updateMany()との使い分けにも注意しましょう。

  1. MongoDBで条件に一致するドキュメントを1件だけ取得する方法

    MongoDBで、指定した検索条件に一致するドキュメントを1件だけ取得したい場合は、findOne()メソッドを使用します。findOne()は、コレクション内から条件を満たすドキュメントのうち、最初に見つかった1件のみを返すメソッドです。サンプルコレクションの作成まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。> db.demo596.insertOne({_id:1,"FirstName":"John","LastName":"Smith"}); { "acknowledge

  2. MongoDBでネストされたドキュメントを更新する方法|位置演算子$を使った配列要素の更新手順

    MongoDBでは、ドキュメント内の配列に格納されたネストされた(入れ子の)ドキュメントも、位置演算子「$」を使うことで効率的に更新できます。この記事では、実際のコード例を通じて、配列内の特定のサブドキュメントを更新する手順をわかりやすく解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ネストされたドキュメントを含むコレクションを作成します。ここでは「Information」というフィールドに、複数のサブドキュメントを持つ配列を格納しています。 > db.demo595.insertOne( { Information: [ { _i