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

MongoDBコレクションに列(フィールド)を追加する方法をわかりやすく解説

MongoDBはドキュメント指向のデータベースであり、RDBMSのような厳密な「列(カラム)」の概念はありません。しかし、$set 演算子を使って既存の全ドキュメントを一括更新することで、すべてのドキュメントに共通の新しいフィールドを追加でき、実質的に「列の追加」と同じことが実現できます。

基本構文

列(フィールド)を追加するには、コレクションに対して更新操作を実行します。基本の構文は以下のとおりです。

db.getCollection(yourCollectionName).update({}, {$set: {"yourColumnName": "yourValue"}}, false, true);

第3引数の false はアップサート(該当ドキュメントが存在しない場合に新規挿入しない)、第4引数の true は「複数のドキュメントをまとめて更新する」ことを意味します。この組み合わせにより、コレクション内のすべてのドキュメントに同じフィールドが追加されます。

サンプルコレクションの作成

それでは、実際にドキュメントを含むコレクションを作成して、動きを確認してみましょう。

> db.addColumnDemo.insertOne({"StudentId":101,"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04d66af5e889d7a519950f")
}
> db.addColumnDemo.insertOne({"StudentId":102,"StudentName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04d673f5e889d7a5199510")
}
> db.addColumnDemo.insertOne({"StudentId":103,"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04d67bf5e889d7a5199511")
}

既存ドキュメントの確認

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

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

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

{
   "_id" : ObjectId("5e04d66af5e889d7a519950f"),
   "StudentId" : 101,
   "StudentName" : "Chris"
}
{
   "_id" : ObjectId("5e04d673f5e889d7a5199510"),
   "StudentId" : 102,
   "StudentName" : "Robert"
}
{
   "_id" : ObjectId("5e04d67bf5e889d7a5199511"),
   "StudentId" : 103,
   "StudentName" : "David"
}

列を追加するクエリの実行

ここで、すべてのドキュメントに「StudentCityName」という新しいフィールドを追加してみます。

> db.getCollection('addColumnDemo').update({}, {$set: {"StudentCityName": "New York"}}, false, true);
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

実行結果の nModified : 3 から、3件すべてのドキュメントが正常に更新されたことがわかります。

追加後のドキュメントを確認

再度 find() メソッドですべてのドキュメントを表示してみましょう。

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

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

{
   "_id" : ObjectId("5e04d66af5e889d7a519950f"),
   "StudentId" : 101,
   "StudentName" : "Chris",
   "StudentCityName" : "New York"
}
{
   "_id" : ObjectId("5e04d673f5e889d7a5199510"),
   "StudentId" : 102,
   "StudentName" : "Robert",
   "StudentCityName" : "New York"
}
{
   "_id" : ObjectId("5e04d67bf5e889d7a5199511"),
   "StudentId" : 103,
   "StudentName" : "David",
   "StudentCityName" : "New York"
}

このように、すべてのドキュメントに「StudentCityName」フィールドが追加され、値として「New York」が設定されていることが確認できます。

補足:updateMany() の利用を推奨

MongoDB 4.2 以降では update() メソッドは非推奨(deprecated)となっており、複数ドキュメントの一括更新には updateMany() を使用することが公式に推奨されています。上記と同じ処理は、次のように書き換えられます。

db.addColumnDemo.updateMany({}, {$set: {"StudentCityName": "New York"}});

こちらの方が意図が明確で可読性も高いため、新規開発では updateMany() を使うようにしましょう。

  1. MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説

    MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが

  2. MySQLでテーブルに列を追加する方法をわかりやすく解説|ALTER TABLEの使い方

    MySQLでテーブルに列を追加する基本の方法 MySQLでテーブルに新しい列を追加するには、ALTER TABLE文とADD COLUMN句を組み合わせて使用します。本記事では、まずId列とName列を持つサンプルテーブルを作成し、その後、ALTERコマンドを使ってAge列とAddress列を追加する手順を順番に解説します。 ステップ1:テーブルを作成する まず、以下のクエリでテーブルを作成します。 mysql> create table AddingColumnNameDemo -> ( -> Id int, -> Name varchar(10