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

MongoDBで作成済みのコレクションにドキュメントを追加する方法($push演算子の使い方)

MongoDBで既存のコレクションにドキュメントを追加するには

すでに作成済みのコレクションに新しいドキュメントを追加するには、MongoDBの更新演算子 $push を使用します。$push は、配列フィールドの末尾に新しい要素を追加するための演算子です。

まず、ドキュメントを含むコレクションを作成しましょう。

> db.demo177.insertOne(
    { "Id": "101", "details": [
        { "StudentName": "Chris", "Scores": [67, 71, 74], "SubjectName": ["MySQL", "Java"] },
        { "StudentName": "David", "Scores": [89, 98, 45], "SubjectName": ["PL/SQL", "C"] } ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e384b2b9e4f06af551997f4")
}

コレクションの内容を確認する

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

> db.demo177.find().pretty();

これにより、以下のような出力が得られます。

{
    "_id" : ObjectId("5e384b2b9e4f06af551997f4"),
    "Id" : "101",
    "details" : [
        {
            "StudentName" : "Chris",
            "Scores" : [ 67, 71, 74 ],
            "SubjectName" : [ "MySQL", "Java" ]
        },
        {
            "StudentName" : "David",
            "Scores" : [ 89, 98, 45 ],
            "SubjectName" : [ "PL/SQL", "C" ]
        }
    ]
}

$pushを使ってドキュメントを追加するクエリ

以下は、作成済みのコレクションの配列フィールドに新しいドキュメントを追加するためのクエリです。update() の条件として "Id": "101" を指定し、$pushdetails 配列に新しい要素を追加しています。

> db.demo177.update({"Id": "101"},
...{
...   $push: {
...       "details": {
...           "StudentName": "Chris",
...           "Scores": [90, 91, 94],
...           "SubjectName": ["MongoDB", "SQL Server"]
...       }
...   }
...});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

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

> db.demo177.find().pretty();

これにより、以下のような出力が得られます。

{
    "_id" : ObjectId("5e384b2b9e4f06af551997f4"),
    "Id" : "101",
    "details" : [
        {
            "StudentName" : "Chris",
            "Scores" : [ 67, 71, 74 ],
            "SubjectName" : [ "MySQL", "Java" ]
        },
        {
            "StudentName" : "David",
            "Scores" : [ 89, 98, 45 ],
            "SubjectName" : [ "PL/SQL", "C" ]
        },
        {
            "StudentName" : "Chris",
            "Scores" : [ 90, 91, 94 ],
            "SubjectName" : [ "MongoDB", "SQL Server" ]
        }
    ]
}

出力を見ると、details 配列の末尾に新しいドキュメント(StudentName: Chris、Scores: [90, 91, 94]、SubjectName: ["MongoDB", "SQL Server"])が正常に追加されていることが確認できます。

補足:最新のMongoDBではupdateOne()を推奨

上記の例で使用している update() は古いバージョンでの書き方で、現在は非推奨(deprecated)となっています。MongoDB 4.2以降では、単一ドキュメントを更新する場合は updateOne()、複数ドキュメントを更新する場合は updateMany() を使用するのが推奨されます。

> db.demo177.updateOne(
...   { "Id": "101" },
...   { $push: { "details": {
...       "StudentName": "Chris",
...       "Scores": [90, 91, 94],
...       "SubjectName": ["MongoDB", "SQL Server"]
...   } } }
...);
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

このように、$push を活用すれば、コレクション全体を再作成することなく、既存の配列フィールドに柔軟にドキュメントを追加できます。

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

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

  2. 【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方

    MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...