AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

Retrieve MongoDB Data

このガイドでは、 Lambda MongoDBを使用してMongoDBコレクションからデータを検索する方法を学びます。このガイドでは、データを検索するために使用できる Eloqueent モデル メソッドについて説明し、さまざまなタイプの検索操作の例を示します。

Laravel 統合の Eloquent モデルの詳細について詳しくは、データのモデル化セクションを参照してください。

このガイドのコード例を実行するには、「クイック スタート 」チュートリアルを完了してください。 このチュートリアルでは、サンプル データを使用して 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 フィールドの値は 2010

  • imdb.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
]);
}
}

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
]);
}
}

Tip

orderBy()メソッドの詳細については、「 クエリ結果の変更 」ガイドの「 クエリ結果のソート 」セクションを参照してください。

クエリフィルターを省略すると、コレクション内のすべてのドキュメントを検索できます。 ドキュメントを返すには、コレクションを表す Elowent モデルでget()メソッドを呼び出します。 あるいは、 get()メソッドのエイリアスall()を使用して同じ操作を実行することもできます。

すべてのドキュメントに一致する検索操作を実行するには、次の構文を使用します。

$movies = Movie::get();

警告

Atlas サンプル データセットのmoviesコレクションには大量のデータが含まれています。 このコレクション内のすべてのドキュメントを取得して表示すると、ウェブ アプリケーションがタイムアウトする可能性があります。

この問題を回避するには、take() メソッドを使用してドキュメント制限を指定します。take()の詳細については、 「クエリ出力の変更」ガイドの「クエリ結果の変更」セクションを参照してください。

以下のセクションでは、Laravel Integration を使用してドキュメントを検索する方法を説明する完全に実行可能なコード例を示しています。これらの例では、Atlas サンプル データセットの sample_mflix.movies コレクションを使用します。

Tip

使用例は、自身の Laravel アプリケーションか、スタートガイドチュートリアルで作成された my-app アプリケーションから実行できます。使用例では、このチュートリアルで作成された Movie.php モデル クラスを使用して、 movies MongoDB コレクションに対する操作を示します。操作を実行するには、サンプル コードを Laravel アプリケーションのコントローラー エンドポイントにコピーできます。

操作の期待される出力を表示するには、コントローラー関数を呼び出し、その結果をウェブ インターフェイスに返すウェブ ルートをアプリケーションに追加します。

対応するそれぞれのクエリ構文の例を表示するには、次の Eloquent タブと Query Builder タブから選択します。

この例では、次のアクションを実行します。

  • Movie Eloent モデルを使用して、 sample_mflixデータベース内のmoviesコレクションを表します

  • クエリフィルターに一致するドキュメントをmoviesコレクションから取得します

  • 検索されたドキュメントを印刷

この例では、 Movieモデルで次のメソッドを呼び出します。

  • where(): directorsフィールドの値に "Rob Reiner" が含まれるドキュメントと一致します

  • orderBy(): 一致したドキュメントを _id 値の昇順で並べ替えます

  • first(): 最初に一致するドキュメントのみを検索

$movie = Movie::where('directors', 'Rob Reiner')
->orderBy('id')
->first();
echo $movie->toJson();

この例では、次のアクションを実行します。

  • DB ファサードから table() メソッドを呼び出して moviesコレクションにアクセスします

  • クエリフィルターに一致するドキュメントをmoviesコレクションから取得します

  • 検索されたドキュメントの titleフィールドを出力します

この例では、次のクエリ ビルダのメソッドを呼び出します。

  • where(): directorsフィールドの値に "Rob Reiner" が含まれるドキュメントと一致します

  • orderBy(): 一致したドキュメントを _id 値の昇順で並べ替えます

  • first(): 最初に一致するドキュメントのみを検索

$movie = DB::table('movies')
->where('directors', 'Rob Reiner')
->orderBy('_id')
->first();
echo $movie->title;

対応するそれぞれのクエリ構文の例を表示するには、次の Eloquent タブと Query Builder タブから選択します。

この例では、次のアクションを実行します。

  • Movie Eloent モデルを使用して、 sample_mflixデータベース内のmoviesコレクションを表します

  • クエリフィルターに一致するドキュメントをmoviesコレクションから検索して印刷します

この例では、 Movieモデルで次のメソッドを呼び出します。

  • where(): runtimeフィールドの値が 900 より大きいドキュメントに一致します

  • orderBy(): 一致したドキュメントを _id 値の昇順で並べ替えます

  • get(): クエリ結果を Lambdaコレクションオブジェクトとして取得します

$movies = Movie::where('runtime', '>', 900)
->orderBy('id')
->get();

この例では、次のアクションを実行します。

  • DB ファサードから table() メソッドを呼び出して moviesコレクションにアクセスします

  • クエリフィルターに一致するドキュメントをmoviesコレクションから検索して印刷します

この例では、次のクエリ ビルダのメソッドを呼び出します。

  • where(): runtimeフィールドの値が 900 より大きいドキュメントに一致します

  • orderBy(): 一致したドキュメントを _id 値の昇順で並べ替えます

  • get(): クエリ結果を Lambdaコレクションオブジェクトとして取得します

$movies = DB::table('movies')
->where('runtime', '>', 900)
->orderBy('_id')
->get();

対応するそれぞれのクエリ構文の例を表示するには、次の Eloquent タブと Query Builder タブから選択します。

この例では、次のアクションを実行します。

  • Movie Eloent モデルを使用して、 sample_mflixデータベース内のmoviesコレクションを表します

  • クエリフィルターに一致するmoviesコレクションからカウントする

  • 一致するドキュメント数を出力

この例では、 Movieモデルで次のメソッドを呼び出します。

  • where(): genresフィールドの値に "Biography" が含まれるドキュメントと一致します

  • count(): 一致するドキュメントの数をカウントし、その数を整数として返します

$count = Movie::where('genres', 'Biography')
->count();
echo 'Number of documents: ' . $count;

この例では、次のアクションを実行します。

  • DB ファサードから table() メソッドを呼び出して moviesコレクションにアクセスします

  • クエリフィルターに一致するmoviesコレクションからカウントする

  • 一致するドキュメント数を出力

この例では、次のクエリ ビルダのメソッドを呼び出します。

  • where(): genresフィールドの値に "Biography" が含まれるドキュメントと一致します

  • count(): 一致するドキュメントの数をカウントし、その数を整数として返します

$count = DB::table('movies')
->where('genres', 'Biography')
->count();
echo 'Number of documents: ' . $count;

対応するそれぞれのクエリ構文の例を表示するには、次の Eloquent タブと Query Builder タブから選択します。

この例では、次のアクションを実行します。

  • Movie Eloent モデルを使用して、 sample_mflixデータベース内のmoviesコレクションを表します

  • クエリフィルターに一致するドキュメントの個別のフィールド値をmoviesコレクションから取得します

  • 個別の値を出力

この例では、 Movieモデルで次のメソッドを呼び出します。

  • where(): directorsフィールドの値に "Sofia Coppola" が含まれるドキュメントと一致します

  • select(): 一致するドキュメントの imdb.ratingフィールド値を取得します

  • distinct(): 選択したフィールドの一意の値を検索し、値のリストを返します

  • get(): クエリ結果を検索します

$ratings = Movie::where('directors', 'Sofia Coppola')
->select('imdb.rating')
->distinct()
->get();
echo $ratings;

この例では、次のアクションを実行します。

  • DB ファサードから table() メソッドを呼び出して moviesコレクションにアクセスします

  • クエリフィルターに一致するドキュメントの個別のフィールド値をmoviesコレクションから取得します

  • 個別の値を出力

この例では、次のクエリ ビルダのメソッドを呼び出します。

  • where(): directorsフィールドの値に "Sofia Coppola" が含まれるドキュメントと一致します

  • select(): 一致するドキュメントの imdb.ratingフィールド値を取得します

  • distinct(): 選択したフィールドの一意の値を検索し、値のリストを返します

  • get(): クエリ結果を検索します

$ratings = DB::table('movies')
->where('directors', 'Sofia Coppola')
->select('imdb.rating')
->distinct()
->get();
echo $ratings;

MongoDB にデータを挿入する方法について詳しくは、「ドキュメントの挿入」ガイドを参照してください。

Lambda 統合が結果を返す方法を変更する方法については、「 クエリ結果の変更 」ガイドを参照してください。