MongoDBのサブドキュメントに新しいキー要素を追加する方法($set演算子の使い方)
MongoDBのサブドキュメントに新しいキーを追加するには
MongoDBでは、既存のサブドキュメント(埋め込みドキュメント)に新しいキーと値のペアを追加したい場合、$set 演算子を使用します。$set 演算子は、指定したフィールドが存在しない場合に自動的に新規作成してくれるため、サブドキュメントへのキー追加に最適です。
基本構文は以下の通りです。
db.yourCollectionName.update({"_id" : yourObjectId },{$set: { "yourOuterFieldName.anyInnerFieldName": yourValue}});ポイントは、外側のフィールド名.内側のフィールド名 の形式でドット表記を使ってパスを指定することです。
コレクションとドキュメントの作成
まず、サンプルとなるコレクションを作成してみましょう。ここでは空の UserDetails サブドキュメントを持つドキュメントを挿入します。
> db.pushNewKeyDemo.insertOne({"UserId":100,"UserDetails":{}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cda58f5b50a6c6dd317adbf")
}挿入結果の確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.pushNewKeyDemo.find();
実行すると、次のような出力が得られます。まだ UserDetails は空のオブジェクトであることがわかります。
{ "_id" : ObjectId("5cda58f5b50a6c6dd317adbf"), "UserId" : 100, "UserDetails" : { } }$set演算子でサブドキュメントに新しいキーを追加
次に、$set 演算子を使って、サブドキュメント UserDetails 内に新しいキー UserName を追加します。
> db.pushNewKeyDemo.update({"_id" : ObjectId("5cda58f5b50a6c6dd317adbf")},{$set: {
"UserDetails.UserName": "David Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })nModified : 1 という結果が返ってくれば、更新が正常に完了しています。
更新後のドキュメントを確認
もう一度 find() メソッドを実行して、ドキュメントの状態を確認しましょう。
> db.pushNewKeyDemo.find();
出力結果を見ると、UserDetails サブドキュメント内に新しいキー UserName とその値が追加されていることが確認できます。
{ "_id" : ObjectId("5cda58f5b50a6c6dd317adbf"), "UserId" : 100, "UserDetails" : { "UserName" : "David Miller" } }まとめ
MongoDBでサブドキュメントに新しいキー要素を追加する場合は、update() メソッドと $set 演算子を組み合わせ、ドット表記で「親フィールド名.新しいキー名」を指定するだけで実現できます。対象のキーが存在しない場合でも自動的に作成されるため、スキーマが柔軟なMongoDBの特性を活かした操作と言えます。
-
MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説
MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic
-
MongoDBで同じキーに複数のOR条件を指定する方法
MongoDBでは、同じキー(フィールド)に対して複数のOR条件を指定したいケースがあります。そのような場合は、$or演算子を一度だけ使うだけで簡単に実現できます。本記事では、具体的な手順をサンプルコード付きで解説します。1. サンプルコレクションの作成まず、テスト用のコレクションにドキュメントを挿入します。> db.demo551.insertOne({"Name":"John"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8