MongoDBでオブジェクト内の配列に要素を追加する方法|$push演算子の使い方を解説
MongoDBでオブジェクト内の配列に要素を挿入するには?
すでに作成済みのオブジェクト内にある配列に新しい要素を追加したい場合は、MongoDBの $push 演算子を使用します。$push は、指定した配列フィールドの末尾に値を追加するための更新演算子で、ネストされた構造のドキュメントにもドット記法を使うことで対応できます。
まずは、サンプルとなるドキュメントを含むコレクションを作成しましょう。
> db.demo449.insertOne(
... {
... details1: {
... details2: [{
... _id:new ObjectId(),
... Name:"Chris"
... }],
... details3: [{
... _id:new ObjectId(),
... Name:"David"
... }]
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e7a40e971f552a0ebb0a6e3")
}
insertOne() メソッドによって、details1 オブジェクトの中に details2 と details3 という2つの配列を持つドキュメントが作成されました。
登録したドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo449.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e7a40e971f552a0ebb0a6e3"), "details1" : { "details2" : [ { "_id" :
ObjectId("5e7a40e971f552a0ebb0a6e1"), "Name" : "Chris" } ], "details3" : [ { "_id" :
ObjectId("5e7a40e971f552a0ebb0a6e2"), "Name" : "David" } ] } }$pushでネストされた配列に要素を追加する
続いて、オブジェクト内にある配列へ新しい要素を挿入するクエリを見てみましょう。重要なポイントは、「details1.details2」のようにドット記法でネストされた配列へのパスを指定することです。
> db.demo449.update({_id:ObjectId("5e7a40e971f552a0ebb0a6e3")}, {$push: {
'details1.details2':{_id:ObjectId(),"Name":"Carol"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }ここでは、対象ドキュメントの _id を条件として指定し、details1.details2 のパスに対して _id と Name を持つ新しいオブジェクト「{ _id: ObjectId(), "Name": "Carol" }」を $push で追加しています。実行結果の WriteResult における「nModified : 1」は、1件のドキュメントが正常に更新されたことを示しています。
更新結果の確認
もう一度 find() メソッドを実行して、更新後の状態を確認してみましょう。
> db.demo449.find();
実行すると、details2 配列の末尾に「Carol」という名前の新しい要素が追加されていることが確認できます。
{ "_id" : ObjectId("5e7a40e971f552a0ebb0a6e3"), "details1" : { "details2" : [ { "_id" :
ObjectId("5e7a40e971f552a0ebb0a6e1"), "Name" : "Chris" }, { "_id" :
ObjectId("5e7a41a671f552a0ebb0a6e5"), "Name" : "Carol" } ], "details3" : [ { "_id" :
ObjectId("5e7a40e971f552a0ebb0a6e2"), "Name" : "David" } ] } }まとめ
- オブジェクト内の配列に要素を追加するには $push 演算子を使用する
- ネストされた配列は「親フィールド名.配列フィールド名」の形式でパスを指定する
- 重複を避けたい場合は、代わりに $addToSet 演算子を検討するとよい
なお、上記の例で使用している update() メソッドは古いバージョンのものであり、現在のMongoDBでは非推奨となっています。実際の開発では、より安全な updateOne() や updateMany() の使用が推奨されますので、覚えておきましょう。
-
MongoDBでオブジェクトからアイテムを削除する方法|$unset演算子の使い方を解説
MongoDBでオブジェクトからアイテムを削除するには?MongoDBのオブジェクト(ネストされたドキュメント)から特定のアイテム(フィールド)を削除したい場合は、更新演算子の$unsetを使用します。$unsetを指定すると、条件に一致したドキュメントから該当フィールドが完全に取り除かれます。ここでは、実際にコレクションを作成し、オブジェクト内のフィールドを削除するまでの一連の手順を順番に見ていきましょう。1. ドキュメントを含むコレクションを作成するまず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。> db.demo467.insertOne(... {.
-
MongoDBでドキュメント内の配列オブジェクトを更新する構文とは?
配列内のオブジェクトを更新する基本手法ドキュメント内の配列に格納されたオブジェクトを更新するには、MongoDBのfindOneAndUpdate()メソッドを使用します。このメソッドは、指定したフィルター条件とソート条件に基づいて、単一のドキュメントを検索して更新できる便利なメソッドです。位置演算子「$」と組み合わせることで、配列内の特定の要素だけをピンポイントで変更できます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、試験情報を持つサンプルコレクションを作成しましょう。> db.demo553.insertOne( ... { ...