返すフィールドを指定する
項目一覧
Overview
このガイドでは、プロジェクションを使用して、読み取り操作から返されるフィールドを指定する方法を学習できます。 プロジェクションは、MongoDB がクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、 Atlas サンプル データセットの sample_restaurants.restaurants
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成し、サンプル データセットをロードする方法については、 PyMongo を使い始める のガイドを参照してください。
プロジェクションのタイプ
プロジェクションを使用して、返されるドキュメントに含めるフィールドを指定したり、除外するフィールドを指定したりできます。 _id
フィールドを除外しない限り、1 つのプロジェクションに包含ステートメントと除外ステートメントを組み合わせることはできません。
含めるフィールドの指定
結果に含めるフィールドを指定するには、次の構文を使用します。
{ "<Field Name>": 1 }
次の例では、 find()
メソッドを使用して、 name
フィールドの値が"Emerald Pub"
であるすべてのレストランを検索します。 次に、プロジェクションを使用して、返されたドキュメントのname
、 cuisine
、 borough
フィールドのみを返します。
results = restaurants.find({ "name" : "Emerald Pub"}, {"name": 1, "cuisine": 1, "borough": 1}) for restaurant in results: print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
プロジェクションを使用して返されるドキュメントに含めるフィールドを指定すると、 _id
フィールドもデフォルトで含まれます。 他のすべてのフィールドは暗黙的に除外されます。 返されるドキュメントから_id
フィールドを削除するには、明示的に除外する必要があります。
フィールドを除外する_id
含めるフィールドを指定する場合は、返されるドキュメントから_id
フィールドを除外することもできます。
次の例では、前の例と同じクエリを実行しますが、プロジェクションから_id
フィールドを除外しています。
results = restaurants.find({ "name" : "Emerald Pub"}, {"_id": 0, "name": 1, "cuisine": 1, "borough": 1}) for restaurant in results: print(restaurant)
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'} {'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}
除外するフィールドの指定
結果から除外するフィールドを指定するには、次の構文を使用します。
{ "<Field Name>": 0 }
次の例では、 find()
メソッドを使用して、 name
フィールドの値が"Emerald Pub"
であるすべてのレストランを検索します。 次に、プロジェクションを使用して、返されたドキュメントから フィールドと フィールドを除外します。grades
address
results = restaurants.find({ "name" : "Emerald Pub"}, {"grades": 0, "address": 0} ) for restaurant in results: print(restaurant)
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'} {'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40668598'}
プロジェクションを使用して除外するフィールドを指定すると、指定されていないフィールドは返されるドキュメントに暗黙的に含まれます。
トラブルシューティング
次のセクションでは、プロジェクションを使用するときに発生する可能性のあるエラーについて説明します。
<field>「インクルージョンプロジェクションのフィールド「フィールド」を除外できません」
単一のプロジェクションにフィールドを含め、除外しようとすると、ドライバーはこのメッセージとともにOperationFailure
を返します。 プロジェクションが、含めるフィールドまたは除外するフィールドのみを指定していることを確認します。
詳細情報
プロジェクションの詳細については、MongoDB Server マニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。