【MongoDB】SQLの「SELECT field AS `別名`」に相当するクエリの書き方
MySQLでは「SELECT field AS `別名`」のようにカラムに別名(エイリアス)を付けられますが、MongoDBでも同じようにフィールド名に別名を付けることが可能です。これを実現するには、aggregate()メソッドの$projectステージを利用します。
MongoDBにおける基本構文
フィールドに別名を付ける際の基本構文は以下の通りです。
db.yourCollectionName.aggregate([
{ "$project": {
"_id": 0,
"anyAliasName": "$yourFieldName"
}}
]);
$projectステージ内では「"別名": "$元のフィールド名"」という形式で指定します。また、「"_id": 0」と設定することで、結果から_idフィールドを除外しています。
サンプルコレクションの作成
まずは、ドキュメントを格納したコレクションを作成しましょう。
> db.selectFieldAsAnotherNameDemo.insertOne({"Name":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d448827b86948e204ca91")
}
> db.selectFieldAsAnotherNameDemo.insertOne({"Name":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d449027b86948e204ca92")
}
> db.selectFieldAsAnotherNameDemo.insertOne({"Name":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d449527b86948e204ca93")
}
> db.selectFieldAsAnotherNameDemo.insertOne({"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d449927b86948e204ca94")
}
登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.selectFieldAsAnotherNameDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5c9d448827b86948e204ca91"), "Name" : "Larry" }
{ "_id" : ObjectId("5c9d449027b86948e204ca92"), "Name" : "Robert" }
{ "_id" : ObjectId("5c9d449527b86948e204ca93"), "Name" : "Sam" }
{ "_id" : ObjectId("5c9d449927b86948e204ca94"), "Name" : "Mike" }
SELECT field AS 別名 に相当するMongoDBのクエリ
それでは、MySQLの「SELECT field AS `別名`」に相当する処理をMongoDBで実行してみましょう。ここでは「Name」フィールドに「StudentName」という別名を付けています。
> db.selectFieldAsAnotherNameDemo.aggregate([
... { "$project": {
... "_id": 0,
... "StudentName": "$Name"
... }}
... ]);
実行結果は以下の通りです。出力時のフィールド名が「StudentName」に変更されていることが確認できます。
{ "StudentName" : "Larry" }
{ "StudentName" : "Robert" }
{ "StudentName" : "Sam" }
{ "StudentName" : "Mike" }
まとめ
MongoDBでフィールドに別名を付けたい場合は、aggregate()の$projectステージを使用します。SQLのAS句と同じ役割を果たし、出力時のフィールド名を自由に変更できるのが特徴です。なお、_idを結果に含めたくない場合は「"_id": 0」の指定を忘れずに行いましょう。
-
MongoDBでフィールドごとにドキュメントをグループ化して取得する方法
MongoDBで特定のフィールドを基準にドキュメントをグループ化して取得したい場合は、集計(Aggregation)パイプラインの $group と $project を組み合わせるのが基本です。この記事では、実際にコレクションを作成しながら、その手順を具体的に解説します。 1. サンプルコレクションの作成 まず、insertOne() メソッドを使って demo540 コレクションに複数のドキュメントを挿入します。 > db.demo540.insertOne({id:1,Name:Chris,CountryName:US}); { acknowledged : true,
-
MongoDBの_idフィールドを非表示にする方法
MongoDBの_idフィールドを非表示にする方法MongoDBでは、find()メソッドでドキュメントを検索すると、デフォルトで_idフィールド(ObjectId)が必ず結果に含まれます。しかし、射影(プロジェクション)という仕組みを使えば、この_idフィールドを非表示にし、必要なフィールドだけを取得することが可能です。本記事では、具体的な手順をサンプルコード付きで解説します。1. コレクションとドキュメントの作成まず、サンプル用のコレクションを作成し、ドキュメントを挿入します。> db.demo575.insertOne({id:101, Information:{Name:&quo