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

MongoDBでドキュメントを更新し、最初のドキュメントだけに新しいキーを追加する方法

MongoDBでドキュメントを更新し、最初のドキュメントだけに新しいキーを追加する方法

MongoDBのupdate()メソッドを使えば、コレクション内の最初のドキュメントだけに新しいキー(フィールド)を簡単に追加できます。update()はデフォルトでは条件に一致した最初の1件のみを更新するため、multiオプションを指定しない限り、他のドキュメントには影響しません。

まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。

> db.demo162.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3684359e4f06af551997c2")
}
> db.demo162.insertOne({"StudentName":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3684389e4f06af551997c3")
}
> db.demo162.insertOne({"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e36843c9e4f06af551997c4")
}

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

> db.demo162.find();

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

{ "_id" : ObjectId("5e3684359e4f06af551997c2"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e3684389e4f06af551997c3"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e36843c9e4f06af551997c4"), "StudentName" : "David" }

続いて、最初のドキュメントに新しいキー「StudentAge」を追加するための更新クエリを見ていきましょう。空のクエリ条件 {} に対して $set 演算子を使用することで、先頭のドキュメントに新しいフィールドを追加できます。

> db.demo162.update({},{$set:{"StudentAge":23}},{upsert:true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

更新結果を確認するため、再びfind()メソッドですべてのドキュメントを表示します。

> db.demo162.find();

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

{ "_id" : ObjectId("5e3684359e4f06af551997c2"), "StudentName" : "Chris", "StudentAge" : 23 }
{ "_id" : ObjectId("5e3684389e4f06af551997c3"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e36843c9e4f06af551997c4"), "StudentName" : "David" }

出力を確認すると、「Chris」のドキュメント(最初のドキュメント)にのみ StudentAge フィールドが追加されており、「Bob」と「David」のドキュメントは変更されていないことがわかります。

補足:MongoDBの新しいバージョンについて

MongoDB 4.2以降では、update()は非推奨となっており、代わりにupdateOne()updateMany()の使用が推奨されています。最初の1件だけを更新したい場合は、updateOne()を使うことで意図がより明確になります。

> db.demo162.updateOne({},{$set:{"StudentAge":23}});

このように、適切な更新メソッドと$set演算子を組み合わせることで、特定のドキュメントだけに柔軟に新しいキーを追加することが可能です。

  1. MongoDBの$group操作でソートし、各グループの先頭ドキュメントのみを取得する方法

    MongoDBの集計パイプラインでは、$sortでドキュメントを並べ替えた後に$groupと$firstを組み合わせることで、グループごとにソート結果の先頭1件だけを効率的に取得できます。本記事では、サンプルコレクションを作成しながら、その具体的な手順をわかりやすく解説します。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo576.insertOne({id:101,Name:"Chris",Marks:45}){ "acknowledged" : tr

  2. 【MongoDB】ネストされたドキュメントのキー名のみを抽出して表示する方法

    MongoDBでは、配列内にネストされたドキュメント(サブドキュメント)のキー名だけを一覧として取得したいケースがあります。本記事では、insertOne()でサンプルデータを作成し、find()で内容を確認した後、集計パイプラインの$reduce、$objectToArray、$map、$concatArraysを組み合わせて、ネストされたドキュメントのキー名のみを抽出する方法を実行例付きで解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、detailsフィールドに複数のドキュメントを持つ配列を含むコレクションを作成します。 > db.dem