MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

【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」の指定を忘れずに行いましょう。

  1. MongoDBでフィールドごとにドキュメントをグループ化して取得する方法

    MongoDBで特定のフィールドを基準にドキュメントをグループ化して取得したい場合は、集計(Aggregation)パイプラインの $group と $project を組み合わせるのが基本です。この記事では、実際にコレクションを作成しながら、その手順を具体的に解説します。 1. サンプルコレクションの作成 まず、insertOne() メソッドを使って demo540 コレクションに複数のドキュメントを挿入します。 > db.demo540.insertOne({id:1,Name:Chris,CountryName:US}); { acknowledged : true,

  2. MongoDBの_idフィールドを非表示にする方法

    MongoDBの_idフィールドを非表示にする方法MongoDBでは、find()メソッドでドキュメントを検索すると、デフォルトで_idフィールド(ObjectId)が必ず結果に含まれます。しかし、射影(プロジェクション)という仕組みを使えば、この_idフィールドを非表示にし、必要なフィールドだけを取得することが可能です。本記事では、具体的な手順をサンプルコード付きで解説します。1. コレクションとドキュメントの作成まず、サンプル用のコレクションを作成し、ドキュメントを挿入します。> db.demo575.insertOne({id:101, Information:{Name:&quo