Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Ruby ドライバー
/

クエリを指定する

このガイドでは、 Rubyドライバーを使用してクエリを指定する方法を学習できます。

クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。 クエリフィルターは、読み取りまたは書込み操作においてドキュメントを照合するためにMongoDBが使用する検索条件を指定する式です。 クエリフィルターでは、クエリに完全に一致するドキュメントを検索するようにドライバーに指示することも、より複雑な一致条件をExpressするためにクエリフィルターを作成することもできます。

このガイドの例では、実稼働ドキュメントを含む fruitsコレクションに対して操作を実行します。次のコード例は、データベースとコレクションを作成し、サンプルドキュメントをコレクションに挿入する方法を示しています。

database = client.use('db')
collection = database[:fruits]
# Inserts documents representing fruits
fruits = [
{ _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: 3, name: 'oranges', qty: 6, rating: 2, type: ['naval', 'mandarin'] },
{ _id: 4, name: 'pineapples', qty: 3, rating: 5, color: 'yellow' }
]
collection.insert_many(fruits)

リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。

次の例では、 findメソッドのパラメーターとしてクエリフィルターを指定します。 このコードでは、 colorフィールドの値が'yellow'であるすべてのドキュメントが返されます。

filter = { color: 'yellow' }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_id"=>2, "name"=>"bananas", "qty"=>7, "rating"=>4, "color"=>"yellow", "type"=>["cavendish"]}
{"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}

注意

すべてのドキュメントの検索

コレクション内のすべてのドキュメントを検索するには、パラメータを渡しずに find メソッドを呼び出します。

results = collection.find

比較演算子は、ドキュメントフィールド値をクエリフィルター内の指定された値に対して評価します。次のリストでは、一般的な比較演算子について説明します。

  • $gt: 指定したフィールドの値が指定した値を超えるドキュメントを返します

  • $lte: 指定されたフィールドの値が指定された値以下のドキュメントを返します

  • $ne: 指定されたフィールドの値が指定された値と等しくないドキュメントを返します

Tip

比較演算子の完全なリストを表示するには、 マニュアルの「 比較クエリ演算子 」MongoDB Server ガイドを参照してください。

次の例では、クエリフィルター内の 比較演算子をfindメソッドへのパラメーターとして指定しています。 コードは、 ratingフィールドの値が2より大きいすべてのドキュメントを返します。

filter = { rating: { '$gt' => 2 } }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_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 つ以上の式のセットの結果に適用されたロジックを使用してドキュメントを一致させます。 以下のリストは、各論理演算子について説明します。

  • $and: すべての句の条件に一致するドキュメントを返します

  • $or: 1 つの句の条件に一致するドキュメントを返します

  • $nor: どの句の条件にも一致しないドキュメントを返します

  • $not: 式に一致しないドキュメントを返します

Tip

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

次の例では、クエリフィルターで論理演算子を find メソッドへのパラメーターとして指定します。コードでは、qtyフィールドの値が 5 より大きいcolor のフィールド値が 'yellow' であるすべてのドキュメントが返されます。

filter = { '$or' => [{ qty: { '$gt' => 5 } }, { color: 'yellow' }] }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_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"}

配列演算子は、 配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。以下のリストは、各配列演算子について説明します。

  • $all: クエリ内のすべての要素を含む配列を持つドキュメントを返します

  • $elemMatch: 配列フィールド内の要素がクエリ内のすべての条件に一致する場合にドキュメントを返します

  • $size: 指定されたサイズの配列を持つドキュメントを返します

Tip

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

次の例では、クエリフィルター内の配列演算子をfindメソッドへのパラメーターとして指定しています。 このコードでは、 type配列フィールドに2要素が含まれるすべてのドキュメントが返されます。

filter = { type: { '$size' => 2 } }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]}
{"_id"=>3, "name"=>"oranges", "qty"=>6, "rating"=>2, "type"=>["naval", "mandarin"]}

要素演算子は、フィールドの存在または型に基づいてデータをクエリします。以下のリストは各要素演算子について説明しています。

  • $exists: 指定したフィールドを含むドキュメントを返します

  • $type: 指定した型のフィールドを含むドキュメントを返します

Tip

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

次の例では、クエリフィルター内の要素演算子をfindメソッドへのパラメーターとして指定しています。 このコードでは、 colorフィールドを持つすべてのドキュメントが返されます。

filter = { color: { '$exists' => true } }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_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"}

評価演算子は、個々のフィールドまたはコレクションのドキュメント全体の評価に基づいてデータを返します。次のリストでは、一般的な要素演算子について説明します。

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

  • $regex: 指定された正規式に一致するドキュメントを返します

  • $mod:フィールド値に対して剰余操作を実行し、余りが指定された値であるドキュメントを返します

Tip

評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子MongoDB Server 」ガイドを参照してください。

次の例では、クエリフィルターで評価演算子をfindメソッドへのパラメーターとして指定しています。 このコードでは正規式を使用して、 nameフィールド値に少なくとも 2 文字の連続した'p'文字があるすべてのドキュメントを返します。

filter = { name: /p{2,}/ }
results = collection.find(filter)
results.each do |doc|
puts doc
end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]}
{"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}

注意

Rubyドライバーは、前述の例に示すように、クエリフィルターに正規式の値が含まれている場合、暗黙的に $regex 演算子を使用します。

ドキュメントのクエリの詳細については、 MongoDB Serverマニュアルの ドキュメントのクエリ を参照してください。

Rubyドライバーを使用してドキュメントを取得する方法の詳細については、データの取得ガイドをご覧ください。

find メソッドの詳細については、APIドキュメントを参照してください。

戻る

Retrieve Data

項目一覧