MongoDBですべてのドキュメントのフィールド名を一括変更する方法【$rename演算子の使い方】
MongoDBですべてのドキュメントのフィールド名を変更するには?
MongoDBでコレクション内のすべてのドキュメントに含まれる特定のフィールドの名前を一括で変更するには、$rename演算子を使用します。基本の構文は以下のとおりです。
db.yourCollectionName.update({}, {$rename:{"yourOldFieldName":"yourNewFieldName"}},
false, true);第4引数にtrueを指定すると、複数ドキュメントへの更新(multi)が有効になり、条件に一致した全ドキュメントが更新対象となります。
補足:最近のバージョンではupdateMany()が推奨
新しいバージョンのMongoDBでは、上記のようなupdate()の書き方に代わって、updateMany()メソッドを使用することが推奨されています。より簡潔に記述できます。
db.yourCollectionName.updateMany({}, {$rename:{"yourOldFieldName":"yourNewFieldName"}});サンプルコレクションの作成
それでは、実際の動作を確認するために、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行します。
> db.renameFieldDemo.insertOne({"StudentName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ee6c7559dd2396bcfbfbb")
}
> db.renameFieldDemo.insertOne({"StudentName":"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ee6cb559dd2396bcfbfbc")
}
> db.renameFieldDemo.insertOne({"StudentName":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ee6cf559dd2396bcfbfbd")
}
> db.renameFieldDemo.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ee6d3559dd2396bcfbfbe")
}
> db.renameFieldDemo.insertOne({"StudentName":"Maxwell"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ee6d8559dd2396bcfbfbf")
}登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。以下のクエリを実行してください。
> db.renameFieldDemo.find().pretty();
実行結果は以下のとおりです。
{ "_id" : ObjectId("5c7ee6c7559dd2396bcfbfbb"), "StudentName" : "John" }
{ "_id" : ObjectId("5c7ee6cb559dd2396bcfbfbc"), "StudentName" : "Carol" }
{ "_id" : ObjectId("5c7ee6cf559dd2396bcfbfbd"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5c7ee6d3559dd2396bcfbfbe"), "StudentName" : "David" }
{ "_id" : ObjectId("5c7ee6d8559dd2396bcfbfbf"), "StudentName" : "Maxwell" }$rename演算子でフィールド名を一括変更する
それでは、すべてのドキュメントのフィールド名「StudentName」を「StudentFirstName」に変更してみましょう。クエリは以下のとおりです。
> db.renameFieldDemo.update({}, {$rename:{"StudentName":"StudentFirstName"}}, false,
true);
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 5 })「nMatched: 5」「nModified: 5」と表示されているように、5件すべてのドキュメントが条件に一致し、正しく更新されました。
変更後の結果を確認する
もう一度find()メソッドを実行して、すべてのドキュメントを確認します。
> db.renameFieldDemo.find().pretty();
実行結果は以下のとおりです。
{ "_id" : ObjectId("5c7ee6c7559dd2396bcfbfbb"), "StudentFirstName" : "John" }
{
"_id" : ObjectId("5c7ee6cb559dd2396bcfbfbc"),
"StudentFirstName" : "Carol"
}
{ "_id" : ObjectId("5c7ee6cf559dd2396bcfbfbd"), "StudentFirstName" : "Bob" }
{
"_id" : ObjectId("5c7ee6d3559dd2396bcfbfbe"),
"StudentFirstName" : "David"
}
{
"_id" : ObjectId("5c7ee6d8559dd2396bcfbfbf"),
"StudentFirstName" : "Maxwell"
}出力結果を見ると、すべてのドキュメントで「StudentName」フィールドが「StudentFirstName」に正常にリネームされていることがわかります。
まとめ
この記事では、MongoDBの$rename演算子を使って、コレクション内のすべてのドキュメントのフィールド名を一括で変更する方法を解説しました。ポイントは以下の3つです。
$rename演算子で「旧フィールド名: 新フィールド名」を指定してリネームを行うupdate()の第4引数をtrueにして全ドキュメントへ適用する(またはupdateMany()を使う)- 更新後は
find()で必ず結果を確認し、意図どおりに変更されていることをチェックする
-
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。サンプルコレクションの作成insertOne()メソッドを使用して、ドキュメントを1件ずつ挿入します。> db.demo712.insertOne({Name:John}); { acknowledged : true, insertedId : ObjectId(5ea85f675d33e20ed1
-
MongoDB 4でドキュメントをソートし、特定の1つのフィールドだけを表示する方法
MongoDB 4でドキュメントを並べ替えるには、sort()メソッドを使用します。さらに、ソートした特定の1つのフィールドのみを表示したい場合は、プロジェクション(射影)を組み合わせて、表示したいフィールドに「1」を設定します。この記事では、実際のコード例を使って手順を順番に解説していきます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、テスト用のコレクション「demo611」にドキュメントを登録します。> db.demo611.insertOne({Name:Chris}); { acknowledged : true, insertedI