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

MongoDBで別のキーの値が一致する要素のキー値を更新する方法

MongoDBで配列内のドキュメントを更新する際、「別のキーの値が特定の値と一致する場合に、その要素の別のキーの値を更新したい」というケースはよくあります。このような場合には、$elemMatch演算子と$set演算子を組み合わせて使用します。

この記事では、配列内の「Name」キーの値が「David」である要素を検索し、その要素の「Age」キーの値を更新する具体例を紹介します。

コレクションの作成

まず、ドキュメントを含むコレクションを作成しましょう。

> db.keyValueDemo.insertOne(
    {
        "_id" : new ObjectId(),
        "CustomerDetails" : [
            {
                "Name" : "Chris",
                "Age" : 24
            },
            {
                "Name" : "Robert",
                "Age" : 29
            },
            {
                "Name" : "David",
                "Age" : 35
            }
        ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cefcf36ef71edecf6a1f6bf")
}

find()メソッドを使用して、コレクション内のすべてのドキュメントを表示してみましょう。

> db.keyValueDemo.find().pretty();

出力

{
    "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"),
    "CustomerDetails" : [
       {
           "Name" : "Chris",
           "Age" : 24
       },
       {
           "Name" : "Robert",
           "Age" : 29
       },
       {
           "Name" : "David",
           "Age" : 35
       }
    ]
}

キー値を更新するクエリ

次に、別のキー(Name)の値が特定の値と一致する要素の、別のキー(Age)の値を更新するクエリを紹介します。ここでは、$elemMatchで条件に一致する配列要素を特定し、位置指定演算子「$」を使ってその要素のフィールドのみを更新します。

> db.keyValueDemo.update(
    {"CustomerDetails":{"$elemMatch":{"Name":"David"}}},
    {"$set":{"CustomerDetails.$.Age":56}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

更新結果の確認

ドキュメントを再度確認して、更新が正しく反映されているかチェックしましょう。

> db.keyValueDemo.find().pretty();

出力

{
    "_id" : ObjectId("5cefcf36ef71edecf6a1f6bf"),
    "CustomerDetails" : [
       {
           "Name" : "Chris",
           "Age" : 24
       },
       {
           "Name" : "Robert",
           "Age" : 29
       },
       {
           "Name" : "David",
           "Age" : 56
       }
    ]
}

実行結果を見ると、ChrisとRobertの年齢は変更されず、条件に一致したDavidの「Age」だけが35から56に更新されていることが確認できます。

このように、$elemMatchで配列内の条件に一致する要素を正確に特定し、位置指定演算子「$」と$setを組み合わせることで、意図した要素のフィールドだけを安全に更新できます。配列内の特定要素を操作する際には、ぜひこのパターンを活用してください。

  1. MongoDBの$push演算子を使って配列に値を手動で追加する方法

    MongoDBでは、既存のドキュメント内にある配列フィールドへ新しい要素を追加したい場合、$push 演算子を使用します。本記事では、実際のコード例を通じて、$push を使った値の手動追加の手順をわかりやすく解説します。1. コレクションとドキュメントの作成まずは、サンプルとなるコレクションを作成し、ドキュメントを挿入してみましょう。以下のように insert() メソッドを使用します。> db.demo585.insert({ ... firstName: John, ... lastName: Doe, ... SubjectName:MongoDB, ...

  2. Javaでキーを指定してHashMapの値を更新する方法

    この記事では、キーを指定してHashMapの値を更新する方法を解説します。JavaのHashMapは、Mapインターフェースをハッシュテーブルベースで実装したクラスであり、キーと値のペア(エントリー)を管理するコレクションです。まず、実際の動作イメージを確認しておきましょう。入力と出力の例入力:Input HashMap: {Java=1, Scala=2, Python=3}期待される出力:The HashMap with the updated value is: {Java=1, Scala=12, Python=3}このように、キー「Scala」に対応する値だけが「2」から「12」へ更