MongoDBでコレクションをクエリするときに、フィールド名に満足できない場合があります。デフォルトでは、フィールド名は実際のドキュメントのフィールド名を反映したものにすぎません。
おそらく、フィールド名に一貫性がないか、タイプミスがあります。理由が何であれ、$project
を使用できます クエリ結果のフィールドの名前を変更するための集約パイプラインステージ。
いくつかの点で、これはSQLでエイリアスを使用することに匹敵します。これは、基になるフィールドの名前を変更せず、クエリ結果で名前を変更するだけだからです。
例
次のようなコレクションのコンテンツを返すとします。
db.employees.find()
結果:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
ここでは、find()
を使用します コレクションの内容を返すメソッド。
この場合、各フィールドの名前が結果に返されます。
しかし、フィールド名を変えたい場合はどうでしょうか。たとえば、name
を置き換えたい場合はどうなりますか employee
と ?
その場合、aggregate()
を使用できます 次のようなクエリを実行するメソッド:
db.employees.aggregate([
{ "$project": { "employee": "$name", "salary": 1 }}
])
結果:
{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" } { "_id" : 3, "salary" : 25000, "employee" : "Fritz" } { "_id" : 4, "salary" : 45000, "employee" : "Chris" } { "_id" : 5, "salary" : 82000, "employee" : "Beck" }
MongoDBは、挿入順にフィールドを表示することに注意してください。これにより、salary
が生成されます。 employee
の前に表示されるフィールド 分野。それが受け入れられない場合は、いつでもクエリを次のように変更できます:
db.employees.aggregate([
{ "$project": { "employee": "$name", "salary": "$salary" }}
])
結果:
{ "_id" : 2, "employee" : "Sarah", "salary" : 128000 } { "_id" : 3, "employee" : "Fritz", "salary" : 25000 } { "_id" : 4, "employee" : "Chris", "salary" : 45000 } { "_id" : 5, "employee" : "Beck", "salary" : 82000 }
埋め込みドキュメントのフィールドの名前を変更する
同じ方法を使用して、埋め込みドキュメントのフィールドの名前を変更できます。この場合、ドット表記を使用して、名前を変更するフィールドを参照します。
pets
に対して次のクエリを実行するとします。 コレクション:
db.pets.find().pretty()
結果:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } } } { "_id" : 2, "name" : "Fetch", "details" : { "born" : ISODate("2020-06-22T14:00:00Z"), "color" : "Black" } } { "_id" : 3, "name" : "Scratch", "details" : { "eats" : [ "Mouse Porridge", "Bird Soup", "Caviar" ], "type" : "Cat", "born" : ISODate("2020-12-19T14:00:00Z") } }
埋め込まれたドキュメントのフィールドの名前は次のように変更できます:
db.pets.aggregate([
{ "$project":
{
"_id": 0,
"Pet": "$name",
"Type": "$details.type",
"Born": "$details.born"
}
}
])
結果:
{ "Pet" : "Wag", "Type" : "Dog" } { "Pet" : "Fetch", "Born" : ISODate("2020-06-22T14:00:00Z") } { "Pet" : "Scratch", "Type" : "Cat", "Born" : ISODate("2020-12-19T14:00:00Z") }
この場合、埋め込まれたドキュメントのすべてのフィールドを選択したわけではありませんが、わかります。
"_id": 0
も使用しました _id
を省略します フィールド。
また、ドキュメントに$project
で指定されたフィールドが実際にない場合も注意してください。 ステージの場合、結果のドキュメントでは単純に省略されます。これは、Born
を省略した最初のドキュメントで確認できます。 フィールド、およびType
を省略した2番目のドキュメント フィールド。