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

MongoDBでサブドキュメントを配列に追加し続ける方法($push演算子の使い方)

MongoDBで既存のドキュメント内にある配列にサブドキュメントを追加し続けたい場合は、$push 演算子を使用します。ドキュメントを更新する際には update() メソッドと組み合わせて使います。本記事では、実際のコード例を通じて具体的な手順を解説します。

1. コレクションの作成とドキュメントの挿入

まず、insertOne() メソッドを使ってコレクションを作成し、ドキュメントを挿入します。

> db.demo587.insertOne({"id":101,"details":[{Name:"Chris",Age:21,Marks:57}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e92ba01fd2d90c177b5bcc9")
}
> db.demo587.insertOne({"id":102,"details":[{Name:"Bob",Age:22,Marks:78}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e92ba0efd2d90c177b5bcca")
}

上記の例では、「details」というフィールドに名前・年齢・点数を持つサブドキュメントが格納された配列が含まれています。

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

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

> db.demo587.find();

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

{ "_id" : ObjectId("5e92ba01fd2d90c177b5bcc9"), "id" : 101, "details" : [ { "Name" : "Chris", "Age" : 21, "Marks" : 57 } ] }
{ "_id" : ObjectId("5e92ba0efd2d90c177b5bcca"), "id" : 102, "details" : [ { "Name" : "Bob", "Age" : 22, "Marks" : 78 } ] }

3. $push演算子でサブドキュメントを追加する

MongoDBでサブドキュメントを配列に追加し続けるためのクエリは以下の通りです。$push を使うことで、既存の配列の末尾に新しい要素を追加できます。

> db.demo587.update({"id":101}, {"$push": {"details":{Subject:"MongoDB"}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

このクエリでは、id が101のドキュメントを検索し、その「details」配列に対して「Subject: MongoDB」という新しいサブドキュメントを追加しています。

4. 更新結果の確認

再度 find() メソッドを実行して、更新後のドキュメントを確認しましょう。

> db.demo587.find();

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

{ "_id" : ObjectId("5e92ba01fd2d90c177b5bcc9"), "id" : 101, "details" : [
   { "Name" : "Chris", "Age" : 21, "Marks" : 57 }, { "Subject" : "MongoDB" }
] }
{ "_id" : ObjectId("5e92ba0efd2d90c177b5bcca"), "id" : 102, "details" : [
   { "Name" : "Bob", "Age" : 22, "Marks" : 78 } 
] }

出力を見ると、id が101のドキュメントの「details」配列に、新しいサブドキュメント { "Subject" : "MongoDB" } が正常に追加されていることがわかります。一方、id が102のドキュメントには変更が加えられていません。

補足:最新バージョンでの推奨メソッド

なお、MongoDBの比較的新しいバージョンでは、update() メソッドは非推奨となっており、代わりに updateOne()updateMany() の使用が推奨されています。例えば、上記の処理は次のように書き換えられます。

> db.demo587.updateOne({"id":101}, {"$push": {"details":{Subject:"MongoDB"}}});

動作内容は同じですが、より明確で安全な更新操作が可能になります。

まとめ

MongoDBで配列にサブドキュメントを繰り返し追加したい場合は、$push 演算子を使うのが基本です。既存の配列フィールドに対して $push を指定することで、元のデータを壊すことなく新しい要素を末尾に追加できます。条件に一致させるフィールド(この例では id)を正しく指定することが、意図したドキュメントだけを更新するためのポイントです。

  1. MongoDBでコレクションを削除(ドロップ)する方法をわかりやすく解説

    MongoDBでコレクションを削除(ドロップ)するには、drop()メソッドを使用します。基本的な構文は以下のとおりです。db.yourCollectionName.drop();この構文を実行すると、コレクションの削除が成功した場合は true、失敗した場合(コレクションが存在しないときなど)は false が返されます。事前準備:データベースとコレクションの一覧を確認するまず、MongoDB内にどのようなコレクションがあるのかを確認してみましょう。ここでは、複数のコレクションを含む「sample」というデータベースを例に説明します。最初に、以下のコマンドで「sample」データベースへ切り

  2. MongoDBでコンソールをクリアする2つの方法|ショートカット「Ctrl + L」とコマンド「cls」の使い方

    MongoDBのシェル(mongo / mongosh)を使っていると、実行したクエリや結果がどんどん積み重なり、画面が見づらくなることがあります。そんなときに便利なのがコンソールのクリア機能です。MongoDBでは、以下の2つの方法でコンソールをクリアできます。 方法1:キーボードショートカット「Ctrl + L」を使う 最も手軽なのが、キーボードショートカットを使う方法です。次のキーを押すだけで、即座にコンソールをクリアできます。 Ctrl + L このキーを押すと、それまで表示されていたログや実行結果がすべて消え、まっさらな状態になります。Linuxのターミナルなどと同じ操作感なので、