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

MongoDBでドキュメントとサブドキュメントを表示・更新する方法(実例付き)

MongoDBでは、ドキュメントの中にサブドキュメント(ネストされた配列やオブジェクト)を持たせることができます。この記事では、ドキュメントとサブドキュメントを含むコレクションの作成、find()メソッドによる表示、update()メソッドによる更新までを具体例とともに解説します。

ドキュメントとサブドキュメントの基本構文

ドキュメントとサブドキュメントを挿入する際の基本的な構文は以下のとおりです。

db.yourCollectionName.insertOne(
    {
        yourFiledName:yourValue,
        yourFieldName : [
            {
                yourFiledName1,
                yourFiledName2,
                .
                .
                .
                N
            }
        ]
    }
);

フィールドの値として配列を指定し、その配列の中にサブドキュメントをオブジェクト形式で格納するのがポイントです。

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

それでは、実際にドキュメントを含むコレクションを作成する例を見てみましょう。ここでは「demo706」というコレクションに2件のドキュメントを挿入します。

> db.demo706.insertOne(
...     {
...        PortalName: "GameApplication",
...        ApplicationConfiguration : [
...            {
...                 "URL": "jdbc:mysql://localhost/customer_tracker?autoReconnect=true",
...                 "USERNAME": "root",
...                 "PASSWORD": "root"
...            }
...        ]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea6f557551299a9f98c93c6")
}
>
> db.demo706.insertOne(
...     {
...        PortalName: "WebMyBusinessApplication",
...        ApplicationConfiguration : [
...            {
...                 "URL": "jdbc:oracle:thin:@localhost:1521:xe",
...                 "USERNAME": "App",
...                 "PASSWORD": "App"
...            }
...        ]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea6f558551299a9f98c93c7")
}

この例では、各ドキュメントに「PortalName」というフィールドを持ち、その中に「ApplicationConfiguration」という配列形式のサブドキュメントが格納されています。サブドキュメントにはデータベース接続に必要なURL、ユーザー名、パスワードが含まれています。

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

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

> db.demo706.find();

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

{ "_id" : ObjectId("5ea6f557551299a9f98c93c6"), "PortalName" : "GameApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:mysql://localhost/customer_tracker?autoReconnect=true", "USERNAME" : "root", "PASSWORD" : "root" } ] }
{ "_id" : ObjectId("5ea6f558551299a9f98c93c7"), "PortalName" : "WebMyBusinessApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:oracle:thin:@localhost:1521:xe", "USERNAME" : "App", "PASSWORD" : "App" } ] }

update()メソッドでドキュメントを更新する

次に、ドキュメントを更新するクエリを見ていきましょう。ここでは「WebMyBusinessApplication」というPortalNameを持つドキュメントを「OnlineCustomerTracker」に変更します。

> db.demo706.update({PortalName: "WebMyBusinessApplication"},{$set:{"PortalName":"OnlineCustomerTracker"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

更新結果の「nMatched : 1」は条件に一致したドキュメントが1件あったことを、「nModified : 1」は実際に1件のドキュメントが更新されたことを示しています。

再度find()メソッドでコレクション内のすべてのドキュメントを表示して、更新が反映されているか確認します。

> db.demo706.find();

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

{ "_id" : ObjectId("5ea6f557551299a9f98c93c6"), "PortalName" : "GameApplication", "ApplicationConfiguration" : [ { "URL" : "jdbc:mysql://localhost/customer_tracker?autoReconnect=true", "USERNAME" : "root", "PASSWORD" : "root" } ] }
{ "_id" : ObjectId("5ea6f558551299a9f98c93c7"), "PortalName" : "OnlineCustomerTracker", "ApplicationConfiguration" : [ { "URL" : "jdbc:oracle:thin:@localhost:1521:xe", "USERNAME" : "App", "PASSWORD" : "App" } ] }

2件目のドキュメントの「PortalName」が「WebMyBusinessApplication」から「OnlineCustomerTracker」に正しく更新されていることが確認できます。このように、$set演算子を使えば、サブドキュメントを含むドキュメントの特定のフィールドだけを簡単に更新できます。


  1. MongoDBでドキュメントを更新する方法:$set演算子を使って上書きを防ぐテクニック

    MongoDBで更新時に上書きを防ぐ方法MongoDBでは、update()メソッドと$set演算子を組み合わせることで、既存のドキュメント全体を置き換えることなく、指定したフィールドだけを安全に更新できます。この記事では、実際のコード例を通じて、その手順と動作を詳しく解説します。1. コレクションとドキュメントの作成まず、insertOne()メソッドを使ってサンプルコレクションにドキュメントを挿入します。> db.demo601.insertOne( ... { ... id:1, ... userDetails: ... { ...

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

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