Overview
このガイドでは、 Scalaドライバーを使用してクエリを指定する方法を学習できます。
クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。クエリフィルターは、読み取りまたは書込み操作においてドキュメントを照合するためにMongoDBが使用する検索条件を指定する式です。
クエリ演算子 を使用すると、クエリフィルターでより複雑な一致条件をExpressできます。Scalaドライバーには、クエリ演算子を適用するためのヘルパーメソッドを提供する Filtersクラスが含まれています。
Tip
Filtersヘルパーメソッドの完全なリストを表示するには、 フィルターAPIドキュメントを参照してください。
サンプル データ
このガイドの例では、実稼働ドキュメントを含むfruitsコレクションに対して操作を実行します。 次のコード例は、データベースとコレクションを作成し、サンプルドキュメントをコレクションに挿入する方法を示しています。
val uri: String = "<connection string>" val client: MongoClient = MongoClient(uri) val database: MongoDatabase = client.getDatabase("db") val collection: MongoCollection[Document] = database.getCollection("fruits") // Inserts documents representing fruits val fruits: Seq[Document] = Seq( Document("_id" -> 1, "name" -> "apples", "qty" -> 5, "rating" -> 3, "color" -> "red", "type" -> Seq("fuji", "honeycrisp")), Document("_id" -> 2, "name" -> "bananas", "qty" -> 7, "rating" -> 4, "color" -> "yellow", "type" -> Seq("cavendish")), Document("_id" -> 3, "name" -> "oranges", "qty" -> 6, "rating" -> 2, "type" -> Seq("naval", "mandarin")), Document("_id" -> 4, "name" -> "pineapples", "qty" -> 3, "rating" -> 5, "color" -> "yellow") ) val result = collection.insertMany(fruits) .subscribe((result: InsertManyResult) => println(result))
完全一致
リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。
次の例では、 find()メソッドのパラメーターとしてクエリフィルターを指定します。 このコードでは、 colorフィールドの値が"yellow"であるすべてのドキュメントが返されます。
val filter = equal("color", "yellow") collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]} {"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、パラメータを渡しずに find() メソッドを呼び出します。
collection.find()
比較演算子
比較演算子は、ドキュメントフィールド値をクエリフィルター内の指定された値に対して評価します。 次のリストでは、一般的な比較演算子とそれに対応する Filtersヘルパーメソッドを定義しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
|---|---|---|
|
| 指定したフィールドの値が指定した値よりも大きいドキュメントと一致します。 |
|
| 指定されたフィールドの値が指定された値以下のドキュメントに一致します。 |
|
| 指定されたフィールドの値が指定された値と等しくないドキュメントと一致します。 |
Tip
演算子の完全なリストを表示するには、 マニュアルの「 比較クエリ演算子 MongoDB Server」ガイドを参照してください。
次の例では、クエリフィルターをfind() メソッドに渡し、gt() メソッドを使用して $gt 比較演算子を適用します。 このコードは、ratingフィールドの値が 2 より大きいすべてのドキュメントを返します。
val filter = gt("rating", 2) collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]} {"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]} {"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}
論理演算子
論理演算子は、2 つ以上の式のセットの結果に適用されたロジックを使用してドキュメントを一致させます。 次の表では、各論理演算子とそれに対応する Filtersヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
|---|---|---|
|
| すべての句の条件を満たすドキュメントに一致します |
|
| 1 つの句の条件を満たすドキュメントに一致します |
|
| どの句の条件にも一致しないドキュメントに一致します |
|
| 式に一致しないドキュメントに一致します |
次の例では、クエリフィルターを find() メソッドに渡し、or() メソッドを使用して $or 論理演算子を適用します。 このコードでは、qty フィールドの値が5 より大きいか、またはcolor フィールドの値が"yellow" であるすべてのドキュメントが返されます。
val filter = or(gt("qty", 5), equal("color", "yellow")) collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]} {"_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"]} {"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}
配列演算子
配列演算子は、 配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。 次の表は、各配列演算子とそれに対応する Filtersヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
|---|---|---|
|
| クエリに含まれるすべての要素を含む配列を持つドキュメントと一致します |
|
| 配列フィールド内の要素がクエリ内のすべての条件を満たす場合にドキュメントと一致します |
|
| 指定されたサイズの配列を持つドキュメントと一致します |
次の例では、クエリフィルターを find() メソッドに渡し、size() メソッドを使用して $size 配列演算子を適用します。 このコードでは、type 配列フィールドに 2 要素が含まれるすべてのドキュメントが返されます。
val filter = size("type", 2) collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]} {"_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"]}
要素演算子
要素演算子は、フィールドの存在または型に基づいてデータをクエリします。 次の表では、各要素演算子とそれに対応する Filtersヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
|---|---|---|
|
| 指定されたフィールドがあるドキュメントと一致します |
|
| フィールドに指定された型がある場合、ドキュメントと一致します。 |
次の例では、クエリフィルターを find() メソッドに渡し、exists() メソッドを使用して $exists 要素演算子を適用します。 このコードでは、colorフィールド を持つすべてのドキュメントが返されます。
val filter = exists("color") collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]} {"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]} {"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}
評価演算子
評価演算子は、個々のフィールドまたはコレクションのドキュメント全体の評価に基づいてデータを返します。 次の表では、一般的な要素演算子とそれに対応する Filtersヘルパーメソッドについて説明します。
クエリ演算子 | ヘルパー メソッド | 説明 |
|---|---|---|
|
| ドキュメントに対してテキスト検索を実行します |
|
| 値が指定された正規式を満たすドキュメントと一致します |
|
| フィールド値に対して剰余演算を実行し、指定された結果を持つドキュメントを照合します |
Tip
評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子MongoDB Server 」ガイドを参照してください。
次の例では、クエリフィルターを find() メソッドに渡し、regex() メソッドを使用して $regex 評価演算子を適用します。 このコードでは正規式を使用して、nameフィールド値に少なくとも 2 文字の連続した 'p' 文字があるすべてのドキュメントを返します。
val filter = regex("name", "p{2,}") collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]} {"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}
詳細情報
ドキュメントのクエリの詳細については、MongoDB Server マニュアルの 「ドキュメントのクエリ」 ガイドを参照してください。
Scalaドライバーを使用してドキュメントを取得する方法について詳しくは、データ取得ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。