MongoDBで特定のフィールドだけを結果として取得する方法
MongoDBで特定のフィールドを取得するには
MongoDBでクエリの結果として特定のフィールドのみを取得したい場合は、findOne()メソッドを使用します。第1引数に検索条件を指定し、第2引数に投影(プロジェクション)を指定することで、必要なフィールドだけを絞り込んで取得できます。
基本的な構文は以下のとおりです。
db.yourCollectionName.findOne({"yourFieldName1": yourValue}, {yourFieldName2: 1});サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは従業員情報を格納するparticularFieldDemoというコレクションを作成します。
> db.particularFieldDemo.insertOne({"EmployeeName":"John Smith","EmployeeAge":26,"EmployeeTechnology":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9b4abb50a6c6dd317ada2")
}
> db.particularFieldDemo.insertOne({"EmployeeName":"Chris Brown","EmployeeAge":28,"EmployeeTechnology":"Java"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9b4d2b50a6c6dd317ada3")
}
> db.particularFieldDemo.insertOne({"EmployeeName":"David Miller","EmployeeAge":30,"EmployeeTechnology":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9b4e8b50a6c6dd317ada4")
}
> db.particularFieldDemo.insertOne({"EmployeeName":"John Doe","EmployeeAge":31,"EmployeeTechnology":"C++"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9b527b50a6c6dd317ada5")
}登録されたドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。見やすくするためにpretty()を付けて実行します。
> db.particularFieldDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5cd9b4abb50a6c6dd317ada2"),
"EmployeeName" : "John Smith",
"EmployeeAge" : 26,
"EmployeeTechnology" : "MongoDB"
}
{
"_id" : ObjectId("5cd9b4d2b50a6c6dd317ada3"),
"EmployeeName" : "Chris Brown",
"EmployeeAge" : 28,
"EmployeeTechnology" : "Java"
}
{
"_id" : ObjectId("5cd9b4e8b50a6c6dd317ada4"),
"EmployeeName" : "David Miller",
"EmployeeAge" : 30,
"EmployeeTechnology" : "MySQL"
}
{
"_id" : ObjectId("5cd9b527b50a6c6dd317ada5"),
"EmployeeName" : "John Doe",
"EmployeeAge" : 31,
"EmployeeTechnology" : "C++"
}findOne()で特定のフィールドを取得する
それでは、条件に一致するドキュメントから特定のフィールドだけを取り出してみましょう。以下の例では、「EmployeeTechnology」が「Java」であるドキュメントを検索し、「EmployeeName」フィールドのみを結果として返します。
> db.particularFieldDemo.findOne({"EmployeeTechnology":"Java"},{EmployeeName:1});実行結果は次のとおりです。
{
"_id" : ObjectId("5cd9b4d2b50a6c6dd317ada3"),
"EmployeeName" : "Chris Brown"
}ポイントの解説
このように、プロジェクションで{EmployeeName: 1}のようにフィールド名に「1」を指定すると、そのフィールドが結果に含まれます。指定しなかった他のフィールド(この例では「EmployeeAge」や「EmployeeTechnology」)は出力から除外されます。
なお、_idフィールドはデフォルトで常に返されます。もし_idを結果に含めたくない場合は、{_id: 0, EmployeeName: 1}のように明示的に「0」を指定して除外できます。
また、findOne()は条件に一致した最初の1件のみを返すメソッドです。複数件のドキュメントから特定のフィールドを取得したい場合は、同じプロジェクションの考え方をfind()メソッドに適用してください。
-
MongoDBの$project演算子でフィールドを射影(プロジェクション)する方法
MongoDBの集計パイプライン(aggregation pipeline)において、ドキュメントから特定のフィールドを射影(プロジェクション)して出力形式を整形したい場合は、$project ステージを使用します。$project を使うと、表示するフィールドの選択だけでなく、$cond や $ifNull などの演算子を組み合わせて、条件に応じた値の変換や代替値の設定も可能です。この記事では、実際にコレクションを作成し、$project を使ってネストされたフィールドを条件付きで射影する方法を解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュ
-
MongoDBの_idフィールドを非表示にする方法
MongoDBの_idフィールドを非表示にする方法MongoDBでは、find()メソッドでドキュメントを検索すると、デフォルトで_idフィールド(ObjectId)が必ず結果に含まれます。しかし、射影(プロジェクション)という仕組みを使えば、この_idフィールドを非表示にし、必要なフィールドだけを取得することが可能です。本記事では、具体的な手順をサンプルコード付きで解説します。1. コレクションとドキュメントの作成まず、サンプル用のコレクションを作成し、ドキュメントを挿入します。> db.demo575.insertOne({id:101, Information:{Name:&quo