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

MongoDBの埋め込みドキュメント配列に$pushを実装する方法

MongoDBでは、$push演算子を使うことで、既存の配列に新しい要素を追加できます。本記事では、埋め込みドキュメント(サブドキュメント)の配列に対して$pushを使用し、新しい要素を追加する手順を具体的なコード例とともに解説します。

コレクションの作成

まず、ドキュメントを含むコレクションを作成しましょう。ここでは「details」という埋め込みドキュメント配列を持つドキュメントを挿入します。

> db.demo288.insertOne({"Name":"Chris",details:[{"CountryName":"US",Marks:78},{"CountryName":"UK",Marks:68}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4c0393f49383b52759cbbe")
}

挿入したドキュメントの確認

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

> db.demo288.find();

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

{ "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [ { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 } ] }

現時点では、「details」配列には「US」と「UK」の2つの要素が格納されています。

$pushによる埋め込みドキュメント配列への追加

次に、埋め込みドキュメント配列に新しい要素を追加するための$pushクエリを実行します。ここでは、「AUS」という国名と98点のマークを持つ新しいドキュメントを追加します。

> db.demo288.update( {Name: "Chris"}, {$push:{ "details":{"CountryName" : "AUS", "Marks" : 98} }}, {upsert:true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果を見ると、「nMatched: 1」「nModified: 1」と表示されており、1件のドキュメントが正常に更新されたことがわかります。なお、{upsert:true}オプションを指定しているため、条件に一致するドキュメントが存在しない場合には新規ドキュメントが自動的に作成されます。

更新後のドキュメントの確認

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

> db.demo288.find();

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

{
   "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [
      { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 },
      { "CountryName" : "AUS", "Marks" : 98 }
   ] 
}

このように、「details」配列の末尾に新しい要素「{ CountryName: "AUS", Marks: 98 }」が追加されていることが確認できます。$pushは配列の末尾に要素を追加するため、既存のデータを壊すことなく安全に配列を拡張できます。

まとめ

MongoDBの$push演算子を使えば、埋め込みドキュメント配列への要素追加も簡単に行えます。ポイントは以下の通りです。

  • $pushは対象の配列フィールド名をキーとして指定し、追加したい値を記述する
  • upsert:trueオプションを付けると、一致するドキュメントがない場合に新規作成される
  • 追加された要素は必ず配列の末尾に配置される

同様の手順で、ネストされた構造を持つドキュメントにも柔軟に対応できるため、実際のアプリケーション開発でも頻繁に活用されるテクニックです。

  1. MongoDBで配列の一致を検索するには?$all演算子の使い方を解説

    MongoDBで配列フィールドに対して複数の要素がすべて含まれているかどうかを確認したい場合、$all 演算子を使用します。$all演算子は、指定したすべての要素を配列に含むドキュメントだけを選択するためのクエリ演算子です。この記事では、実際のコレクションを作成しながら、$all演算子を使った配列一致検索の手順を具体的に見ていきましょう。サンプルコレクションの作成とインデックス設定まず、ドキュメントを格納するコレクションを作成し、「ListOfSubject」フィールドにインデックスを設定します。> db.demo668.createIndex({ListOfSubject:1}); {

  2. MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法

    MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: