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

MongoDBでドキュメントの配列に新しい要素を追加するクエリの書き方

MongoDBで配列に新しい要素を追加する方法

MongoDBのドキュメント内にある配列に新しい要素(フィールド)を追加するには、update()メソッドと位置演算子 $ を組み合わせて使用します。まずは、サンプルとなるコレクションを作成してみましょう。

1. コレクションの作成

insertOne()メソッドを使って、ドキュメントを挿入します。

> db.demo222.insertOne({"details":[{"StudentName":"Chris","StudentMarks":78},{"StudentName":"David","StudentMarks":89}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3ee31703d395bdc213472f")
}

2. ドキュメントの確認

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

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

上記のコマンドを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5e3ee31703d395bdc213472f"),
    "details" : [
        {
            "StudentName" : "Chris",
            "StudentMarks" : 78
        },
        {
            "StudentName" : "David",
            "StudentMarks" : 89
        }
    ]
}

3. 配列要素への新しいフィールドの追加

ここからが本題です。ドキュメント内の配列に新しい要素を追加するクエリは次のとおりです。

> db.demo222.update({"details.StudentName" : "Chris"},{"$set" : {"details.$.SubjectName":"MongoDB"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

このクエリでは、条件として "details.StudentName" : "Chris" を指定し、一致した配列要素を位置演算子 $ で特定しています。そして $set 演算子によって、その要素に対してのみ SubjectName フィールドが追加されます。

4. 更新結果の確認

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

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

実行結果は以下のようになります。

{
    "_id" : ObjectId("5e3ee31703d395bdc213472f"),
    "details" : [
        {
            "StudentName" : "Chris",
            "StudentMarks" : 78,
            "SubjectName" : "MongoDB"
        },
        {
            "StudentName" : "David",
            "StudentMarks" : 89
        }
    ]
}

出力を見ると、「Chris」の配列要素にだけ SubjectName : "MongoDB" が追加されていることがわかります。このように位置演算子 $ を使えば、配列の中から条件に一致した特定の要素だけをピンポイントで更新できます。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法

    MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: