MongoDBでは、コレクション内のドキュメントを更新するときにフィールドの名前を変更できます。
フィールドの名前を変更するには、$rename
を呼び出します フィールドの現在の名前と新しい名前を持つ演算子。これにより、その名前のフィールドを持つすべての一致するドキュメントのフィールドの名前が変更されます。
例
employees
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
そして、name
の名前を変更したいとします。 employee
へのフィールド 。
これを行うことができます:
db.employees.updateMany(
{ },
{ $rename: { "name": "employee" } }
)
出力:
{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }
ここで、find()
を使用すると コレクション内のドキュメントを返すメソッドを使用すると、次の結果が表示されます。
db.employees.find()
結果:
{ "_id" : 1, "salary" : 55000, "employee" : "Sandy" } { "_id" : 2, "salary" : 128000, "employee" : "Sarah" } { "_id" : 3, "salary" : 25000, "employee" : "Fritz" } { "_id" : 4, "salary" : 45000, "employee" : "Chris" } { "_id" : 5, "salary" : 82000, "employee" : "Beck" }
複数のフィールドの名前を変更
複数のフィールドの名前は、カンマで区切って変更できます。
例:
db.employees.updateMany(
{ },
{ $rename: { "employee": "e", "salary": "s" } }
)
出力:
{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }
現在のコレクションは次のようになっています:
{ "_id" : 1, "e" : "Sandy", "s" : 55000 } { "_id" : 2, "e" : "Sarah", "s" : 128000 } { "_id" : 3, "e" : "Fritz", "s" : 25000 } { "_id" : 4, "e" : "Chris", "s" : 45000 } { "_id" : 5, "e" : "Beck", "s" : 82000 }
埋め込みドキュメント
ドット表記を使用して、埋め込まれたドキュメントのフィールド名を更新できます。
ドキュメントの例:
db.pets.findOne()
結果:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } } }
埋め込まれたドキュメントのいくつかのフィールドを更新しましょう:
db.pets.updateMany(
{ },
{ $rename: {
"details.type": "details.t",
"details.weight": "details.w",
"details.awards": "details.a"
}
}
)
ドキュメントを確認すると、次のことがわかります。
db.pets.findOne()
結果:
{ "_id" : 1, "name" : "Wag", "details" : { "a" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" }, "t" : "Dog", "w" : 20 } }
埋め込まれたドキュメントに埋め込まれているドキュメントのフィールド名を更新することもできます:
db.pets.updateMany(
{ },
{ $rename: {
"details.a.Florida Dog Awards": "details.a.fda",
"details.a.New York Marathon": "details.a.nym",
"details.a.Sumo 2020": "details.a.s2020"
}
}
)
そして、ドキュメントをもう一度確認しましょう:
db.pets.findOne()
結果:
{ "_id" : 1, "name" : "Wag", "details" : { "a" : { "fda" : "Top Dog", "nym" : "Fastest Dog", "s2020" : "Biggest Dog" }, "t" : "Dog", "w" : 20 } }