返すフィールドを指定する
Overview
このガイドでは、 Scalaドライバーを使用して、プロジェクションを使用して読み取り操作から返されるフィールドを指定する方法を学習できます。プロジェクションは、 MongoDB がクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、restaurants
sample_restaurants
Atlasサンプルデータセット の データベース内の コレクションを使用します。 Scalaアプリケーションからこのコレクションにアクセスするには、AtlasMongoClient
クラスターに接続する を作成し、 変数と 変数に次の値を割り当てます。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 ドキュメントを参照してください。