クエリを指定する
Overview
このガイドでは、 MongoDB PHPライブラリを使用してクエリを指定する方法を学習できます。
クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。 クエリフィルターは、読み取りまたは書込み操作においてドキュメントを照合するためにMongoDBが使用する検索条件を指定する式です。 クエリフィルターでは、クエリに完全に一致するドキュメントを検索するようにドライバーに指示することも、より複雑な一致条件をExpressするためにクエリフィルターを作成することもできます。
サンプル データ
このガイドの例では、実稼働ドキュメントを含む fruits
コレクションに対して操作を実行します。 次のコード例は、データベースとコレクションを作成し、サンプルドキュメントをコレクションに挿入する方法を示しています。
$uri = '<connection string>'; $client = new Client($uri); $collection = $client->db->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' ] ]; $result = $collection->insertMany($fruits);
完全一致
リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。
次の例では、 MongoDB\Collection::find()
メソッドのパラメーターとしてクエリフィルターを指定します。 このコードでは、 color
フィールドの値が'yellow'
であるすべてのドキュメントが返されます。
$cursor = $collection->find(['color' => 'yellow']); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":2,"name":"bananas","qty":7,"rating":4,"color":"yellow","type":["cavendish"]} {"_id":4,"name":"pineapples","qty":3,"rating":5,"color":"yellow"}
Tip
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、 find()
メソッドを呼び出し、そのメソッドに空のクエリフィルターを渡します。 次の例では、 コレクション内のすべてのドキュメントを検索します。
$cursor = $collection->find([]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
比較演算子
比較演算子は、ドキュメントフィールド値をクエリフィルター内の指定された値に対して評価します。 次のリストでは、一般的な比較演算子を定義しています。
$gt
: より大きい$lte
: 以下$ne
: 等しくない
比較演算子の完全なリストを表示するには、 マニュアルの「 比較クエリ演算子 」MongoDB Server ガイドを参照してください。
次の例では、クエリフィルター内の 比較演算子をMongoDB\Collection::find()
メソッドへのパラメーターとして指定しています。 コードは、 rating
フィールドの値が2
より大きいすべてのドキュメントを返します。
$cursor = $collection->find(['rating' => ['$gt' => 2]]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_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
:式に一致しないすべてのドキュメントを返します
論理演算子の詳細については、 MongoDB Serverマニュアルの「 論理クエリ演算子 」ガイドを参照してください。
次の例では、クエリフィルターで論理演算子をMongoDB\Collection::find()
メソッドへのパラメーターとして指定します。 このコードでは、 qty
フィールドの値が5
より大きいか、またはcolor
フィールドの値が'yellow'
であるすべてのドキュメントが返されます。
$cursor = $collection->find([ '$or' => [ ['qty' => ['$gt' => 5]], ['color' => 'yellow'] ] ]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_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
: 指定されたサイズの配列を持つすべてのドキュメントを返します
配列演算子の詳細については、MongoDB Server マニュアルの「 配列クエリ演算子 」ガイドを参照してください。
次の例では、クエリフィルター内の配列演算子をMongoDB\Collection::find()
メソッドへのパラメーターとして指定しています。 このコードでは、 type
配列フィールドに2
要素が含まれるすべてのドキュメントが返されます。
$cursor = $collection->find(['type' => ['$size' => 2]]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":1,"name":"apples","qty":5,"rating":3,"color":"red","type":["fuji","honeycrisp"]} {"_id":3,"name":"oranges","qty":6,"rating":2,"type":["naval","mandarin"]}
要素演算子
要素演算子は、フィールドの存在または型に基づいてデータをクエリします。
要素演算子の詳細については、 MongoDB Serverマニュアルの「 要素クエリ演算子 」ガイドを参照してください。
次の例では、クエリフィルター内の要素演算子をMongoDB\Collection::find()
メソッドへのパラメーターとして指定しています。 このコードでは、 color
フィールドを持つすべてのドキュメントが返されます。
$cursor = $collection->find(['color' => ['$exists' => true]]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_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
:フィールド値に対して剰余操作を実行し、余りが指定された値であるドキュメントを返します
評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子MongoDB Server 」ガイドを参照してください。
次の例では、クエリフィルターで評価演算子をMongoDB\Collection::find()
メソッドへのパラメーターとして指定しています。 このコードでは正規式を使用して、 name
フィールド値に少なくとも 2 文字の連続した'p'
文字があるすべてのドキュメントを返します。
$cursor = $collection->find(['name' => ['$regex' => 'p{2,}']]); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_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 マニュアルの 「ドキュメントのクエリ」 ガイドを参照してください。
MongoDB PHPライブラリを使用してドキュメントを取得する方法の詳細については、「 データ取得ガイド」をご覧ください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。