Overview
このガイドでは、 Scalaドライバーを使用して、プロジェクションを使用して読み取り操作から返されるフィールドを指定する方法を学習できます。プロジェクションは、 MongoDB がクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、restaurants sample_restaurantsAtlasサンプルデータセット の データベース内の コレクションを使用します。Scalaアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する MongoClient を作成し、database 変数と collection 変数に次の値を割り当てます。
val database: MongoDatabase = client.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("restaurants")
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
プロジェクションのタイプ
プロジェクションを使用して、返されるドキュメントに含めるフィールドを指定したり、除外するフィールドを指定したりできます。 _idフィールドを除外しない限り、1 つのプロジェクションに包含ステートメントと除外ステートメントを組み合わせることはできません。
含めるフィールドの指定
結果に含めるフィールドを指定するには、projection() メソッドと find() メソッドをチェーンします。 Projectionsクラスには、含めるフィールドを設定するために使用できる include()ヘルパーメソッドが用意されています。
次の例では、 find() メソッドを使用して、nameフィールドの値が "Emerald Pub" であるすべてのレストランを検索します。 次に、コードは projection() メソッドと include() メソッドを呼び出して、一致するドキュメントの name、cuisine、borough フィールドのみを返すように検索操作に指示します。
collection .find(equal("name", "Emerald Pub")) .projection(include("name", "cuisine", "borough")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "borough": "Manhattan", "cuisine": "American", "name": "Emerald Pub"} {"_id": {"$oid": "..."}, "borough": "Queens", "cuisine": "American", "name": "Emerald Pub"}
プロジェクションを使用して返されるドキュメントに含めるフィールドを指定すると、 _idフィールドもデフォルトで含まれます。 他のすべてのフィールドは暗黙的に除外されます。 返されるドキュメントから_idフィールドを削除するには、明示的に除外する必要があります。
フィールドを除外する_id
含めるフィールドを指定するときは、返されるドキュメントから _idフィールドを除外することもできます。 Projectionsクラスには、このフィールドを省略するために使用できる excludeId()ヘルパーメソッドが用意されています。
次の例では、前の例と同じクエリを実行しますが、プロジェクションから_idフィールドを除外します。
collection .find(equal("name", "Emerald Pub")) .projection(fields(include("name", "cuisine", "borough"), excludeId())) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"borough": "Manhattan", "cuisine": "American", "name": "Emerald Pub"} {"borough": "Queens", "cuisine": "American", "name": "Emerald Pub"}
除外するフィールドの指定
結果から除外するフィールドを指定するには、projection() メソッドと find() メソッドをチェーンします。 Projectionsクラスには、除外するフィールドを設定するために使用できる exclude()ヘルパーメソッドが用意されています。
次の例では、 find() メソッドを使用して、nameフィールドの値が "Emerald Pub" であるすべてのレストランを検索します。 次に、コードは projection() メソッドと exclude() メソッドを呼び出して、結果の name フィールドと address フィールドを省略するように検索操作に指示します。
collection .find(equal("name", "Emerald Pub")) .projection(exclude("name", "address")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "borough": "Manhattan", "cuisine": "American", "grades": [...], "restaurant_id": "40367329"} {"_id": {"$oid": "..."}, "borough": "Queens", "cuisine": "American", "grades": [...], "restaurant_id": "40668598"}
プロジェクションを使用して除外するフィールドを指定すると、指定されていないフィールドは返されるドキュメントに暗黙的に含まれます。
詳細情報
プロジェクションの詳細については、 MongoDB Serverマニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。