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

MongoDBでオブジェクト配列内にネストされた文字列配列を更新する方法

MongoDBでは、オブジェクトの配列の中にさらにネストされた文字列の配列に対して更新操作を行いたいケースがあります。この記事では、$pull演算子と全位置演算子$[]を組み合わせて、ネストされた文字列配列から特定の要素を削除(更新)する方法を、実際のコード例とともにわかりやすく解説します。

ドキュメントを含むコレクションの作成

まずは、insertOne()メソッドを使用して、オブジェクト配列の中に文字列配列がネストされたドキュメントをコレクションに挿入しましょう。

> db.demo412.insertOne(
... {
... "Information1" : [
... {
... "Information2" : [
... "John",
... "David"
... ]
... },
... {
... "Information2" : [
... "Mike"
... ]
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e70f38b15dc524f70227683")
}

この例では、「Information1」フィールドにオブジェクトの配列が格納されており、その各オブジェクトの中に「Information2」という文字列の配列がネストされています。

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

挿入したドキュメントを確認するために、find()メソッドですべてのドキュメントを表示してみましょう。

> db.demo412.find();

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

{ "_id" : ObjectId("5e70f38b15dc524f70227683"), "Information1" : [ { "Information2" : [ "John", "David" ] }, { "Information2" : [ "Mike" ] } ] }

ネストされた文字列配列を更新するクエリ

それでは、MongoDBでオブジェクトの配列内にネストされた文字列の配列を更新するクエリを見ていきましょう。ここでは、updateMany()メソッドと$pull演算子、そして全位置演算子$[]を組み合わせて使用します。

> db.demo412.updateMany(
... { _id: ObjectId("5e70f38b15dc524f70227683") },
... { $pull : {'Information1.$[].Information2' : "Mike" } }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

ポイントとなるのは「Information1.$[].Information2」というパス指定です。$[]は全位置演算子と呼ばれ、配列内のすべての要素に対して更新操作を適用します。これにより、各オブジェクトの「Information2」配列すべてに$pullが実行され、値「Mike」が削除されます。

更新結果の確認

再度find()メソッドですべてのドキュメントを表示し、更新が正しく反映されているか確認しましょう。

> db.demo412.find();

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

{ "_id" : ObjectId("5e70f38b15dc524f70227683"), "Information1" : [ { "Information2" : [ "John", "David" ] }, { "Information2" : [ ] } ] }

出力を見ると、2番目のオブジェクトの「Information2」配列から「Mike」が削除され、空の配列になっていることがわかります。このように、全位置演算子$[]を活用すれば、ネストされた配列に対しても柔軟に更新操作を行うことができます。

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

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

  2. MongoDBでオブジェクト配列内の特定のネストされたドキュメントをクエリする方法

    MongoDBでオブジェクトの配列からネストされたドキュメントを抽出する オブジェクトの配列に格納されたネストされたドキュメントを条件付きで検索したい場合、find()メソッドに$elemMatch演算子を組み合わせることで、指定した条件に一致する要素だけを取り出すことができます。 ここでは、「StudentAge」フィールドを持つ学生情報だけを配列から抽出する例を見ていきましょう。 1. サンプルコレクションの作成 まず、ドキュメントを挿入してコレクションを作成します。このコレクションには、学生情報がオブジェクトの配列として格納されています。 > db.demo763.insertO