Overview
このガイドでは、 Lambda MongoDBを使用してMongoDBコレクションからデータを検索する方法を学びます。このガイドでは、データを検索するために使用できる Eloqueent モデル メソッドについて説明し、さまざまなタイプの検索操作の例を示します。
Laravel 統合の効率モデルの詳細については、「 効率モデル セクション 」を参照してください。
始める前に
このガイドのコード例を実行するには、「クイック スタート 」チュートリアルを完了してください。 このチュートリアルでは、サンプル データを使用して MongoDB Atlas インスタンスを設定し、Lambda ウェブ アプリケーションで次のファイルを作成する手順を説明します。
Movie.phpファイル(moviesコレクション内のドキュメントを表すMovieモデルを含む)MovieController.phpファイル(データベース操作を実行するためのshow()関数を含む)browse_movies.blade.phpデータベース操作の結果を表示するための HTML コードを含む ファイル
次のセクションでは、Laravel アプリケーション内のファイルを編集して検索操作コード例を実行し、期待される出力を表示する方法について説明します。
クエリに一致するドキュメントの取得
Lambda の Eloqueent オブジェクト関係マッパー(ORM)を使用して、MongoDB コレクションを表すモデルを作成し、その上でクエリ条件を指定するためにメソッドを連鎖させることができます。
一連の条件に一致するドキュメントを検索するには、コレクションの対応する Eloqueent モデルでwhere()メソッドを呼び出し、クエリフィルターを メソッドに渡します。
Tip
Retrieve One Document
where() メソッドは、一致するすべてのドキュメントを検索します。最初に一致するドキュメントを取得するには、first() メソッドを連鎖させることができます。詳細と例の表示については、このガイドの 最初の結果を取得する セクションを参照してください。
クエリフィルターは、フィールド値の要件を指定し、これらの要件を満たすドキュメントのみを返すように検索操作に指示します。
クエリを構築するには、次のwhere()メソッド呼び出しのいずれかを使用できます。
where('<field name>', <value>)ターゲット フィールドが正確に指定された値を持つドキュメントに一致するクエリを構築しますwhere('<field name>', '<comparison operator>', <value>)ターゲット フィールドの値が比較条件を満たすドキュメントに一致するクエリを構築します
検索操作に複数の条件セットを適用するには、一連のwhere()メソッドを連鎖させることができます。
where()メソッドを使用してクエリを作成したら、 get()メソッドを連鎖させてクエリ結果を検索します。
この例では、 Movie Elastic モデルで 2 つのwhere()メソッドを呼び出して、次の条件を満たすドキュメントを検索します。
yearフィールドの値は2010imdb.ratingネストされたフィールドの値が より大きい8.5
クエリを指定するには、次の構文を使用します。
$movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get();
browse_moviesビューでクエリ結果を表示するには、 MovieController.phpファイルのshow()関数を次のコードのように編集します。
class MovieController { public function show() { $movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Inception Year: 2010 Runtime: 148 IMDB Rating: 8.8 IMDB Votes: 1294646 Plot: A thief who steals corporate secrets through use of dream-sharing technology is given the inverse task of planting an idea into the mind of a CEO. Title: Senna Year: 2010 Runtime: 106 IMDB Rating: 8.6 IMDB Votes: 41904 Plot: A documentary on Brazilian Formula One racing driver Ayrton Senna, who won the F1 world championship three times before his death at age 34.
Elastic ORM の代わりに Lambda クエリ ビルダを使用してクエリを実行する方法については、「クエリ ビルダ」ページを参照してください。
配列フィールド要素の一致
ドキュメントを検索するときに、配列フィールド要素を照合するためにクエリフィルターを指定できます。 ドキュメントに配列フィールドが含まれている場合、その値に指定された配列要素のすべてまたは一部が含まれているかどうかに基づいて、ドキュメントを照合できます。
次のwhere()メソッド呼び出しのいずれかを使用して、配列フィールドでクエリを構築できます。
where('<array field>', <array>)配列フィールド値が指定された配列と完全に一致するドキュメントに一致するクエリを構築しますwhere('<array field>', 'in', <array>)配列フィールド値に指定された配列要素が 1 つ以上含まれているドキュメントに一致するクエリを構築します
where()メソッドを使用してクエリを作成したら、 get()メソッドを連鎖させてクエリ結果を検索します。
次のExact Array Match タブとElement Match タブから選択して、各パターンのクエリ構文を表示します。
この例では、 countries配列が正確に['Indonesia', 'Canada']であるドキュメントを検索します。
$movies = Movie::where('countries', ['Indonesia', 'Canada']) ->get();
この例では、 countries配列に配列['Canada', 'Egypt']の値の 1 つが含まれているドキュメントを検索します。
$movies = Movie::where('countries', 'in', ['Canada', 'Egypt']) ->get();
Eloquet ORM の代わりに Lambda クエリ ビルダを使用して配列フィールドをクエリする方法については、 クエリ ビルダ ガイドの「配列要素の一致」セクションを参照してください。
最初の結果を取得
一連の条件に一致する最初のドキュメントを取得するには、 where()メソッドとそれに続くfirst()メソッドを使用します。
一意の値をクエリするときに一貫した結果が得られるように、 orderBy()メソッドをfirst()にチェーンします。 orderBy()メソッドを省略すると、MongoDB はドキュメントの自然な順序に従って、またはコレクションに表示されるように、一致するドキュメントを返します。
この例では、 runtimeフィールドの値が30であるドキュメントをクエリし、 _idフィールドの値に従って最初に一致するドキュメントを返します。
クエリを指定するには、次の構文を使用します。
$movie = Movie::where('runtime', 30) ->orderBy('_id') ->first();
browse_moviesビューでクエリ結果を表示するには、 MovieController.phpファイルのshow()関数を次のコードのように編集します。
class MovieController { public function show() { $movie = Movie::where('runtime', 30) ->orderBy('_id') ->first(); return view('browse_movies', [ 'movies' => $movie ]); } }
Title: Statues also Die Year: 1953 Runtime: 30 IMDB Rating: 7.6 IMDB Votes: 620 Plot: A documentary of black art.
Tip
orderBy()メソッドの詳細については、「 クエリ結果の変更 」ガイドの「 クエリ結果のソート 」セクションを参照してください。
コレクション内のすべてのドキュメントを取得
クエリフィルターを省略すると、コレクション内のすべてのドキュメントを検索できます。 ドキュメントを返すには、コレクションを表す Elowent モデルでget()メソッドを呼び出します。 あるいは、 get()メソッドのエイリアスall()を使用して同じ操作を実行することもできます。
すべてのドキュメントに一致する検索操作を実行するには、次の構文を使用します。
$movies = Movie::get();
詳細情報
Lambda 統合を使用して検索操作を実行する方法を示す実行可能なコード例については、次の使用例を参照してください。