クエリを指定する
Overview
このガイドでは、 Scalaドライバーを使用してクエリを指定する方法を学習できます。
クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。クエリフィルターは、読み取りまたは書込み操作においてドキュメントを照合するためにMongoDBが使用する検索条件を指定する式です。
クエリ演算子 を使用すると、クエリフィルターでより複雑な一致条件を表現できます。 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
ヘルパーメソッドを定義しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
---|---|---|
|
| Matches documents in which the value of the given field is greater than
the specified value. |
|
| Matches documents in which the value of the given field is less than or
equal to the specified value. |
|
| Matches documents in which the value of the given field does not equal the
specified value. |
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
ヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
---|---|---|
|
| Matches documents that satisfy the conditions of all clauses |
|
| Matches documents that satisfy the conditions of one clause |
|
| Matches documents that do not satisfy the conditions of any clause |
|
| Matches documents that do not match the expression |
次の例では、クエリフィルターを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
ヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
---|---|---|
|
| Matches documents that have arrays containing all elements in the query |
|
| Matches documents if an element in their array field satisfies all
conditions in the query |
|
| Matches documents that have arrays of a specified size |
次の例では、クエリフィルターを 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
ヘルパーメソッドについて説明しています。
クエリ演算子 | ヘルパー メソッド | 説明 |
---|---|---|
|
| Matches documents that have the specified field |
|
| Matches documents if a field has the specified type |
次の例では、クエリフィルターを 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
ヘルパーメソッドについて説明します。
クエリ演算子 | ヘルパー メソッド | 説明 |
---|---|---|
|
| Performs a text search on documents |
|
| Matches documents that have values satisfying a specified
regular expression |
|
| Performs a modulo operation on the value of a field
and matches documents with a specified result |
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 ドキュメントを参照してください。