AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

クエリを指定する

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

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

$gt

gt()

指定したフィールドの値が指定した値よりも大きいドキュメントと一致します。

$lte

lte()

指定されたフィールドの値が指定された値以下のドキュメントに一致します。

$ne

ne()

指定されたフィールドの値が指定された値と等しくないドキュメントと一致します

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()

すべての句の条件を満たすドキュメントに一致します

$or

or()

1 つの句の条件を満たすドキュメントに一致します

$nor

nor()

どの句の条件にも一致しないドキュメントに一致します

$not

not()

式に一致しないドキュメントに一致します

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()

クエリに含まれるすべての要素を含む配列を持つドキュメントと一致します

$elemMatch

elemMatch()

配列フィールド内の要素がクエリ内のすべての条件を満たす場合にドキュメントと一致します

$size

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()

指定されたフィールドがあるドキュメントと一致します

$type

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()

ドキュメントに対してテキスト検索を実行します

$regex

regex()

値が指定された正規式を満たすドキュメントと一致します

$mod

mod()

フィールド値に対して剰余演算を実行し、指定された結果を持つドキュメントを照合します

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