MongoDBでオブジェクト内の配列に新しい要素を追加(プッシュ)する方法
MongoDBでは、ドキュメント内のオブジェクト(サブドキュメント)に含まれる配列へ新しい要素を追加する際、$elemMatch演算子と$push演算子、そして位置演算子「$」を組み合わせて使用します。この記事では、実際のコード例をもとに、データの作成から更新、結果の確認までの一連の手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ネストされた構造を持つドキュメントを含むコレクションを作成します。
> db.pushNewItemsDemo.insertOne(
{
"_id" : 1,
"StudentScore" : 56,
"StudentOtherDetails" : [
{
"StudentName" : "John",
"StudentFriendName" : [
"Bob",
"Carol"
]
},
{
"StudentName" : "David",
"StudentFriendName" : [
"Mike",
"Sam"
]
}
]
}
);
{ "acknowledged" : true, "insertedId" : 1 }
このコレクションには、学生ごとのスコアと友人名のリストが、オブジェクトの配列として格納されています。
2. 登録されたドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.pushNewItemsDemo.find();
実行すると、次のような出力が得られます。
{ "_id" : 1, "StudentScore" : 56, "StudentOtherDetails" : [ { "StudentName" : "John", "StudentFriendName" : [ "Bob", "Carol" ] }, { "StudentName" : "David", "StudentFriendName" : [ "Mike", "Sam" ] } ] }
3. オブジェクト内の配列に新しい要素を追加する
ここからが本題です。$elemMatchで対象のサブドキュメントを特定し、$pushと位置演算子「$」を組み合わせることで、該当する配列にのみ新しい要素を追加できます。
> db.pushNewItemsDemo.update({"_id":1,"StudentOtherDetails":{"$elemMatch":{"StudentName":"David"}}},
{"$push":{"StudentOtherDetails.$.StudentFriendName":"James"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
このクエリのポイントは次の3つです。
- $elemMatch:配列内の条件に一致する要素(ここではStudentNameが「David」のオブジェクト)を正確に特定します。
- $push:指定した配列の末尾に新しい値を追加します。
- $(位置演算子):クエリ条件に一致した配列要素の位置を自動的に参照します。
なお、MongoDBの最新バージョンではupdate()は非推奨となっているため、実運用ではupdateOne()やupdateMany()を使用することをおすすめします。
4. 更新結果の確認
再度find()メソッドを実行して、更新が正しく反映されているか確認しましょう。
> db.pushNewItemsDemo.find();
実行結果は以下の通りです。
{ "_id" : 1, "StudentScore" : 56, "StudentOtherDetails" : [ { "StudentName" : "John", "StudentFriendName" : [ "Bob", "Carol" ] }, { "StudentName" : "David", "StudentFriendName" : [ "Mike", "Sam", "James" ] } ] }
「David」のStudentFriendName配列に「James」が正常に追加されていることが確認できます。「John」側の配列には影響がない点にも注目してください。
まとめ
オブジェクト内の配列に新しい要素を追加する場合は、$elemMatchで対象を特定 → $pushと位置演算子「$」で追加という流れが基本です。この手法を使えば、ネストされたドキュメント構造でも意図した箇所だけを安全かつ効率的に更新できます。
-
MongoDBのオブジェクト配列からアイテムを取得する方法
MongoDBでオブジェクト配列からアイテムを取得するには?MongoDBのドキュメント内にネストされたオブジェクト配列から特定のアイテムを取り出したい場合は、aggregate()メソッドを使用します。集計パイプラインの各ステージを組み合わせることで、配列の展開・絞り込み・集約を柔軟に行えます。まずは、サンプルコレクションにドキュメントを作成してみましょう。> db.demo459.insertOne( ... { _id : 1, ... Information : [ ... { ... Name : Chris, ... _id : new O
-
MongoDBでドキュメント内の配列オブジェクトを更新する構文とは?
配列内のオブジェクトを更新する基本手法ドキュメント内の配列に格納されたオブジェクトを更新するには、MongoDBのfindOneAndUpdate()メソッドを使用します。このメソッドは、指定したフィルター条件とソート条件に基づいて、単一のドキュメントを検索して更新できる便利なメソッドです。位置演算子「$」と組み合わせることで、配列内の特定の要素だけをピンポイントで変更できます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、試験情報を持つサンプルコレクションを作成しましょう。> db.demo553.insertOne( ... { ...