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

変数インデックスを使ってMongoDBドキュメント内の配列を更新する方法

MongoDBでは、ドキュメント内の配列要素を変数に格納したインデックス値を使って動的に更新できます。通常、配列の特定位置を更新する場合は「フィールド名.0」のようにインデックスを直接記述しますが、プログラムの中で動的に位置を指定したいケースでは、JavaScriptのオブジェクト操作を組み合わせることで実現可能です。

基本構文

変数インデックスによって配列を更新するには、以下の構文を使用します。ここで、yourIndexValueはインデックス値、yourIndexVariableNameはインデックスを格納する変数名です。

var yourIndexVariableName = yourIndexValue,
anyVariableName = { "$set": {} };
yourVariableName["$set"]["yourFieldName." + yourIndexVariableName] = "yourValue";
db.yourCollectionName.update({ "_id": yourObjectId }, yourVariableName);

ポイントは、$set演算子の対象となるフィールドパスを文字列連結で動的に生成している点です。これにより、実行時に決まる任意のインデックス位置の要素を更新できます。

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

まず、ドキュメントを含むコレクションを作成しましょう。ここでは学生の履修科目リストを持つドキュメントを挿入します。

> db.updateByVariableDemo.insertOne({"StudentSubjects":["MySQL","Java","SQL Server","PL/SQL"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd553c37924bb85b3f4893a")
}

挿入結果の確認

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

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

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

{
    "_id" : ObjectId("5cd553c37924bb85b3f4893a"),
    "StudentSubjects" : [
        "MySQL",
        "Java",
        "SQL Server",
        "PL/SQL"
    ]
}

変数インデックスによる配列の更新

それでは、実際に変数インデックスを使って配列要素を更新してみます。ここでは、インデックス「1」(2番目の要素)を「MongoDB」に書き換えます。

> var indexValue = 1,
... valueToUpdate= { "$set": {} };
> valueToUpdate["$set"]["StudentSubjects."+indexValue] = "MongoDB";
MongoDB
> db.updateByVariableDemo.update({ "_id": ObjectId("5cd553c37924bb85b3f4893a") }, valueToUpdate)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

この処理では、まず変数indexValueに更新したい位置(1)を代入し、空の$setオブジェクトを作成します。その後、「StudentSubjects.1」というフィールドパスを文字列連結で生成し、新しい値「MongoDB」を設定しています。nModifiedが1になっていることから、正常に更新されたことがわかります。

更新後の確認

もう一度ドキュメントを表示して、更新結果を確認しましょう。

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

実行すると、次の出力が得られます。

{
    "_id" : ObjectId("5cd553c37924bb85b3f4893a"),
    "StudentSubjects" : [
        "MySQL",
        "MongoDB",
        "SQL Server",
        "PL/SQL"
    ]
}

ご覧のとおり、配列の2番目の要素(インデックス1)が「Java」から「MongoDB」に正しく更新されました。この手法を使えば、アプリケーションのロジック内で計算された動的なインデックス値をもとに、柔軟に配列要素を操作できます。

  1. MongoDBで配列内の要素を更新する方法|$setと位置演算子$の使い方を解説

    MongoDBで配列内の要素を更新する基本 MongoDBでドキュメント内の配列の要素を更新するには、update()メソッドに $set 演算子と位置演算子「$」を組み合わせて使用します。この組み合わせにより、クエリ条件に一致した配列要素だけをピンポイントで書き換えることができます。 ステップ1:コレクションの作成とドキュメントの挿入 まず、insertOne() メソッドを使ってサンプルデータを登録します。ここでは、大学名(CollegeName)と学費(Fees)を含む「CollegeDetails」という配列を持つドキュメントを1件作成しました。 > db.demo494.in

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

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