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

MongoDBで配列フィールドの値を置き換える方法|位置演算子$の使い方を解説

MongoDBで配列フィールドの値を置き換える方法

MongoDBでは、位置演算子「$」を使用することで、配列内の特定の要素だけを効率的に置き換えることができます。本記事では、実際のコード例をもとに、配列フィールドの値を更新する手順をわかりやすく解説します。

手順1:サンプルコレクションの作成

まず、insertOne()メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成します。

> db.replaceAnArrayFieldValueDemo.insertOne({"StudentTechnicalSubjects":["MySQL","SQL Server","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cea41e0ef71edecf6a1f68f")
}

手順2:登録されたドキュメントの確認

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

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

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

{
   "_id" : ObjectId("5cea41e0ef71edecf6a1f68f"),
   "StudentTechnicalSubjects" : [
      "MySQL",
      "SQL Server",
      "PL/SQL"
   ]
}

手順3:位置演算子$を使って配列の値を置き換える

ここからが本題です。配列フィールドの値を置き換えるには、update()メソッドと位置演算子「$」を組み合わせます。以下の例では、「SQL Server」を「MongoDB」に更新しています。

> db.replaceAnArrayFieldValueDemo.update(
   {"StudentTechnicalSubjects":"SQL Server"},
   { $set: { 'StudentTechnicalSubjects.$': "MongoDB" }}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

検索条件に一致した配列要素を「StudentTechnicalSubjects.$」で参照することで、該当する要素のみが「MongoDB」に書き換えられます。配列内の何番目に目的の値があるかを事前に把握しておく必要がないのが大きなメリットです。

手順4:更新結果の確認

再度find()メソッドを実行し、ドキュメントが正しく更新されたかを確認しましょう。

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

実行結果は以下のとおりです。「SQL Server」が「MongoDB」に置き換えられていることがわかります。

{
   "_id" : ObjectId("5cea41e0ef71edecf6a1f68f"),
   "StudentTechnicalSubjects" : [
      "MySQL",
      "MongoDB",
      "PL/SQL"
   ]
}

まとめ

位置演算子「$」を活用すれば、配列内の条件に一致した最初の要素を直接更新できるため、配列データの扱いが格段に楽になります。なお、最新バージョンのMongoDBでは、update()の代わりにupdateOne()やupdateMany()の使用が推奨されている点にも注意してください。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBの集約(Aggregation)で特定のフィールド値を持つドキュメントを取得する方法

    特定の条件に一致するドキュメントを取得したい場合には、aggregate() メソッドを使用します。ここでは、フィールド「Age」の値が「21」であるドキュメントを取得するケースを例に解説します。 サンプルコレクションの作成 まずは、ドキュメントを含むコレクションを作成しましょう。 > db.demo685.insertOne( ... { ... details: ... [ ... { ... Name:Chris, ... Age:21 ... }, ..