クエリを指定する
Overview
このガイドでは、MongoDB Kotlin ドライバーでクエリを指定する方法を学習できます。
ほとんどの CRUD 操作では、クエリフィルターで一致基準を指定することにより、一致するドキュメントのセットを絞り込むことができます。 クエリフィルターには、結果セットに含めるドキュメントを決定する特定のフィールドに適用される 1 つ以上のクエリ演算子が含まれます。
このページでは、次のクエリ演算子について、使用例とともに説明します。
このガイドの例では、 paint_purchases
コレクション内の次のドキュメントを使用します。
{ "_id": 1, "color": "red", "qty": 9, "vendor": ["A", "E"] } { "_id": 2, "color": "purple", "qty": 8, "vendor": ["B", "D", "F"], "rating": 5 } { "_id": 3, "color": "blue", "qty": 5, "vendor": ["A", "E"] } { "_id": 4, "color": "white", "qty": 6, "vendor": ["D"], "rating": 9 } { "_id": 5, "color": "yellow", "qty": 4, "vendor": ["A", "B"] } { "_id": 6, "color": "pink", "qty": 3, "vendor": ["C"] } { "_id": 7, "color": "green", "qty": 8, "vendor": ["C", "E"], "rating": 7 } { "_id": 8, "color": "black", "qty": 7, "vendor": ["A", "C", "D"] }
このデータは、次の Kotlin データ クラスでモデル化されます。
data class PaintOrder( val id: Int, val qty: Int, val color: String, val vendor: List<String>, val rating: Int? = null )
比較演算子
比較演算子は、コレクション内の値との比較に基づいてデータをクエリします。 一般的な比較演算子として、「~より大きい」という比較のためのgt()
、「~以下」という比較のためのlte()
、「~と等しくない」という比較のためのne()
などが挙げられます。
次の例では、 Filters.gt()
メソッドを使用して、 paint_purchases
コレクション内のqty
の値が7
より大きいすべてのドキュメントを照合します。
val filter = Filters.gt("qty", 7) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=1, qty=9, color=red, vendor=[A, E], rating=null) PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)
論理演算子
論理演算子は、フィールド レベルの演算子の結果に適用されたロジックを使用してデータをクエリします。 よく使用される論理演算子には、すべての演算子が true でなければならないand()
と、演算子のうち少なくとも 1 つが true でなければならないor()
などがあります。
次の例では、 Filters.and()
メソッドを使用して、 qty
の値が5
以下で、かつcolor
"pink"
でないドキュメントをpaint_purchases
コレクション内で照合します。
val filter = Filters.and(Filters.lte("qty", 5), Filters.ne("color", "pink")) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=3, qty=5, color=blue, vendor=[A, E], rating=null) PaintOrder(id=5, qty=4, color=yellow, vendor=[A, B], rating=null)
配列演算子
配列演算子は、配列フィールド内の要素の値または量に基づいてデータをクエリします。
次の例では、 Filters.size()
メソッドを使用して、 paint_purchases
コレクション内でvendor
リストのサイズが3
であるドキュメントをマッチングしています。
val filter = Filters.size("vendor", 3) val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)
要素演算子
要素演算子は、フィールドの存在または型に基づいてデータをクエリします。
次の例では、 Filters.exists()
メソッドを使用して、 paint_purchases
コレクション内にrating
を持つドキュメントを照合します。
val filter = Filters.exists("rating") val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5) PaintOrder(id=4, qty=6, color=white, vendor=[D], rating=9) PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)
評価演算子
評価演算子は、正規表現やテキスト検索などの高レベルのロジックでデータをクエリします。
次の例では、 Filters.regex()
メソッドを使用して、 paint_purchases
コレクション内で文字"k"
で終わるcolor
を持つドキュメントを照合します。
val filter = Filters.regex("color", "k$") val findFlow = collection.find(filter) findFlow.collect { println(it) }
PaintOrder(id=6, qty=3, color=pink, vendor=[C], rating=null) PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)
このガイドで言及されている演算子の詳細については、次のサーバー マニュアル エントリを参照してください。