MongoDBで既存のドキュメントに新しいフィールドを追加する方法|$addToSetの使い方を実例で解説
MongoDBでは、$addToSet演算子とupdate()メソッドを組み合わせることで、作成済みのドキュメントに新しいフィールドを追加できます。本記事では、サンプルコレクションの作成から新しいフィールドの追加、結果の確認までを、実際のコード例とともにわかりやすく解説します。
サンプルコレクションの作成
まずはデモ用として、コレクション「createFieldDemo」を作成し、複数の学生情報ドキュメントを挿入しておきます。ドキュメントの挿入にはinsertOne()メソッドを使用します。
> db.createFieldDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99e28b50a6c6dd317ad95")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"Larry","StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99e2fb50a6c6dd317ad96")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"Chris","StudentAge":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99e38b50a6c6dd317ad97")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"David","StudentAge":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99e43b50a6c6dd317ad98")
}
find()メソッドでドキュメントを確認する
続いて、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.createFieldDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd99e28b50a6c6dd317ad95"),
"StudentFirstName" : "John",
"StudentAge" : 21
}
{
"_id" : ObjectId("5cd99e2fb50a6c6dd317ad96"),
"StudentFirstName" : "Larry",
"StudentAge" : 23
}
{
"_id" : ObjectId("5cd99e38b50a6c6dd317ad97"),
"StudentFirstName" : "Chris",
"StudentAge" : 22
}
{
"_id" : ObjectId("5cd99e43b50a6c6dd317ad98"),
"StudentFirstName" : "David",
"StudentAge" : 25
}
$addToSetで新しいフィールドを作成する
ここからが本題です。既存のドキュメントに新しいフィールド「StudentLastName」(学生の姓)を追加していきます。update()メソッドの第2引数で$addToSet演算子を指定し、追加したいフィールド名と値を渡します。
> db.createFieldDemo.update({_id: ObjectId("5cd99e43b50a6c6dd317ad98")}, {$addToSet: {"StudentLastName": "Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
結果として"nModified" : 1と表示されているため、1件のドキュメントが正常に更新されたことがわかります。
更新後の全ドキュメントを確認する
もう一度すべてのドキュメントを表示して、更新結果を確認しましょう。
> db.createFieldDemo.find().pretty();
実行結果は以下の通りです。
{
"_id" : ObjectId("5cd99e28b50a6c6dd317ad95"),
"StudentFirstName" : "John",
"StudentAge" : 21
}
{
"_id" : ObjectId("5cd99e2fb50a6c6dd317ad96"),
"StudentFirstName" : "Larry",
"StudentAge" : 23
}
{
"_id" : ObjectId("5cd99e38b50a6c6dd317ad97"),
"StudentFirstName" : "Chris",
"StudentAge" : 22
}
{
"_id" : ObjectId("5cd99e43b50a6c6dd317ad98"),
"StudentFirstName" : "David",
"StudentAge" : 25,
"StudentLastName" : [
"Miller"
]
}
ご覧のとおり、「David」のドキュメントだけに新しいフィールド「StudentLastName」が追加されました。ここで注目すべき点として、$addToSetで作成されるフィールドは配列型になります。値「Miller」は単独の文字列ではなく、配列["Miller"]として格納されている点に注意してください。
補足:$set演算子との違いと使い分け
文字列や数値といった単一の値を持つ通常のフィールドを新規作成したい場合は、$set演算子を使うのが一般的です。
> db.createFieldDemo.update({_id: ObjectId("5cd99e43b50a6c6dd317ad98")}, {$set: {"StudentLastName": "Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- $set:指定したフィールドを単一の値として設定・新規作成する演算子。既存の値がある場合は上書きされます。
- $addToSet:配列フィールドに重複のない値を追加するための演算子。対象フィールドが存在しない場合は、自動的に配列として新規作成されます。
また、現在のMongoDBでは旧式のupdate()の代わりに、updateOne()やupdateMany()メソッドの使用が推奨されています。書き方はほぼ同じなので、以下のように簡単に置き換えられます。
> db.createFieldDemo.updateOne({_id: ObjectId("5cd99e43b50a6c6dd317ad98")}, {$set: {"StudentLastName": "Miller"}});
このように、用途に応じて適切な更新演算子を選ぶことで、MongoDBの既存ドキュメントへ柔軟に新しいフィールドを追加できます。
-
PHPスクリプトで新しいデータベースを作成する方法|mysql_queryの使い方とサンプルコード
ご存知の通り、PHPにはMySQLサーバー上でSQL文を実行するための mysql_query という関数が用意されており、これを利用することで新しいデータベースを作成できます。 データベース作成の基本的な流れ PHPスクリプトからデータベースを作成する際は、一般的に次の手順で処理を進めます。 接続情報の設定:ホスト名、ユーザー名、パスワードをそれぞれ変数に格納します。 MySQLサーバーへの接続:mysql_connect() を使ってサーバーに接続し、接続に失敗した場合はエラーメッセージを表示して処理を終了させます。 SQL文の実行:CREATE DATABASE 文を組み立て、mys
-
Python(pandas)で既存の列を利用してデータフレームに新しい列を作成する方法
データフレーム(DataFrame)は、データを行と列という表形式で格納する二次元のデータ構造です。SQLのテーブルやExcelのシートのようなイメージを持つと分かりやすいでしょう。データフレームは、以下のコンストラクタを使用して作成できます。pd.DataFrame(data, index, columns, dtype, copy)以前の記事では、Seriesオブジェクトとして新しい列を作成し、元のデータフレームにインデックス付けして追加する方法を紹介しました。今回は、データフレームにすでに存在する列を組み合わせて、新しい列を作成する方法を解説します。この手法は、既存の列に対して何らかの計