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

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の既存ドキュメントへ柔軟に新しいフィールドを追加できます。

  1. PHPスクリプトで新しいデータベースを作成する方法|mysql_queryの使い方とサンプルコード

    ご存知の通り、PHPにはMySQLサーバー上でSQL文を実行するための mysql_query という関数が用意されており、これを利用することで新しいデータベースを作成できます。 データベース作成の基本的な流れ PHPスクリプトからデータベースを作成する際は、一般的に次の手順で処理を進めます。 接続情報の設定:ホスト名、ユーザー名、パスワードをそれぞれ変数に格納します。 MySQLサーバーへの接続:mysql_connect() を使ってサーバーに接続し、接続に失敗した場合はエラーメッセージを表示して処理を終了させます。 SQL文の実行:CREATE DATABASE 文を組み立て、mys

  2. Python(pandas)で既存の列を利用してデータフレームに新しい列を作成する方法

    データフレーム(DataFrame)は、データを行と列という表形式で格納する二次元のデータ構造です。SQLのテーブルやExcelのシートのようなイメージを持つと分かりやすいでしょう。データフレームは、以下のコンストラクタを使用して作成できます。pd.DataFrame(data, index, columns, dtype, copy)以前の記事では、Seriesオブジェクトとして新しい列を作成し、元のデータフレームにインデックス付けして追加する方法を紹介しました。今回は、データフレームにすでに存在する列を組み合わせて、新しい列を作成する方法を解説します。この手法は、既存の列に対して何らかの計