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番目のドキュメント フィールド。