Docs Menu
Docs Home
/ / /
Scala
/

クエリを指定する

項目一覧

  • Overview
  • サンプル データ
  • 完全一致
  • 比較演算子
  • 論理演算子
  • 配列演算子
  • 要素演算子
  • 評価演算子
  • 詳細情報
  • API ドキュメント

このガイドでは、 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ヘルパーメソッドを定義しています。

クエリ演算子
ヘルパー メソッド
説明

$gt

gt()

Matches documents in which the value of the given field is greater than the specified value.

$lte

lte()

Matches documents in which the value of the given field is less than or equal to the specified value.

$ne

ne()

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ヘルパーメソッドについて説明しています。

クエリ演算子
ヘルパー メソッド
説明

$and

and()

Matches documents that satisfy the conditions of all clauses

$or

or()

Matches documents that satisfy the conditions of one clause

$nor

nor()

Matches documents that do not satisfy the conditions of any clause

$not

not()

Matches documents that do not match the expression

Tip

論理演算子の詳細については、 MongoDB Serverマニュアルの「 論理クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルターを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ヘルパーメソッドについて説明しています。

クエリ演算子
ヘルパー メソッド
説明

$all

all()

Matches documents that have arrays containing all elements in the query

$elemMatch

elemMatch()

Matches documents if an element in their array field satisfies all conditions in the query

$size

size()

Matches documents that have arrays of a specified size

Tip

配列演算子の詳細については、MongoDB Server マニュアルの「 配列クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルターを 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ヘルパーメソッドについて説明しています。

クエリ演算子
ヘルパー メソッド
説明

$exists

exists()

Matches documents that have the specified field

$type

type()

Matches documents if a field has the specified type

Tip

要素演算子の詳細については、 MongoDB Serverマニュアルの「 要素クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルターを 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ヘルパーメソッドについて説明します。

クエリ演算子
ヘルパー メソッド
説明

$text

text()

Performs a text search on documents

$regex

regex()

Matches documents that have values satisfying a specified regular expression

$mod

mod()

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 ドキュメントを参照してください。

戻る

Retrieve Data