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