MongoDBコレクションのフィールドを再マッピング(リネーム)する方法
MongoDBコレクション内のフィールドを再マッピング(フィールド名の変更)するには、update()メソッドと$rename演算子を組み合わせて使用します。この記事では、実際のコード例を使って手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成します。
> db.demo171.insertOne( { "Name": "Chris", "Details": { "SubjectName": "MySQL", "CountryName": "US" } } );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3837399e4f06af551997e0")
}2. ドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo171.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3837399e4f06af551997e0"), "Name" : "Chris", "Details" : { "SubjectName" : "MySQL", "CountryName" : "US" } }3. フィールドを再マッピングするクエリ
次のクエリを実行すると、「Name」フィールドが「StudentName」に変更されます。第3引数の「false」はアップサートを行わないこと、第4引数の「true」はコレクション内のすべてのドキュメントに適用することを意味します。
> db.demo171.update({}, { $rename : { 'Name' : 'StudentName'} }, false, true);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })4. 変更結果の確認
再度find()メソッドを実行して、変更後のドキュメントを確認してみましょう。
> db.demo171.find();
実行すると、次のように「Name」が「StudentName」に置き換えられていることがわかります。
{ "_id" : ObjectId("5e3837399e4f06af551997e0"), "Details" : { "SubjectName" : "MySQL", "CountryName" : "US" }, "StudentName" : "Chris" }補足:updateMany()の活用
なお、旧式のupdate()は現在非推奨(deprecated)となっているため、最新のMongoDBでは複数ドキュメントを一括更新する場合にupdateMany()を使用するのが推奨されています。
> db.demo171.updateMany({}, { $rename: { 'Name': 'StudentName' } });また、$rename演算子はネストされたドキュメント内のフィールドにも対応しており、「Details.SubjectName」のようにドット記法でパスを指定すれば、サブドキュメントのフィールド名も簡単に変更できます。
-
【MongoDB】コレクション内のドキュメントの位置(順位)を取得する方法
MongoDBで、あるドキュメントがコレクション内のどの位置にあるかを調べるには、sort()メソッドとcount()メソッドを組み合わせて使用します。この記事では、実際のコード例を使いながらその手順をわかりやすく解説します。1. サンプルコレクションの作成まず、動作確認用のドキュメントを含むコレクションを作成します。> db.demo47.insertOne({"ClientName":"Adam"}); { "acknowledged" : true, "inse
-
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。サンプルコレクションの作成insertOne()メソッドを使用して、ドキュメントを1件ずつ挿入します。> db.demo712.insertOne({Name:John}); { acknowledged : true, insertedId : ObjectId(5ea85f675d33e20ed1