Docs Menu
Docs Home
/ / /
Lambda MongoDB

クエリ ビルダ

項目一覧

  • Overview
  • 始める前に
  • 一致するドキュメントの取得
  • メソッドの例
  • 論理条件演算
  • 範囲とタイプのチェック
  • テキストパターン一致の例
  • Retrieve Distinct Values
  • 集計
  • 一般的なフィールド値でグループ化された結果の例
  • 結果数の例
  • フィールド例の最大値
  • フィールドの例の最小値
  • フィールド例の平均値
  • フィールドの合計値の例
  • 一致した結果の集計の例
  • クエリ結果の変更
  • 注文結果の例
  • 指定した数の結果を省略する例
  • 結果の例に含まれるフィールドと配列値のサブセットの表示
  • 結果のページ分割の例
  • MongoDB 操作を使用したデータの取得
  • フィールドの例が含まれています
  • すべてのフィールドの例を含む
  • 配列サイズに一致する例
  • 一致データ型の例
  • 剰余の例えで計算された値に一致
  • 正規表現に一致する
  • MongoDB Query API 操作の実行例
  • 配列要素の一致の例
  • カーソル タイムアウトの指定の例
  • 地理空間操作を使用したロケーションの一致
  • 位置の例えに近い
  • エリア内の例
  • ジオメトリの交差の例
  • 近傍一致の近接データの例
  • MongoDB 書込み操作を使用したデータの書込み
  • ドキュメントのアップサートの例
  • 数値の増加の例
  • 数値の減算の例
  • 配列要素を追加する例
  • 配列要素の削除の例
  • フィールドを削除する例

このガイドでは、Lambda クエリ ビルダの Lambda 統合 拡張機能を使用して MongoDB database を操作する方法を学習できます。 クエリ ビルダを使用すると、単一の構文とスムーズなインターフェースを使用して、サポートされている任意のデータベースのクエリを作成できます。

注意

Lambel 統合は、Lambel のクエリ ビルダと Eloqueent ORM を拡張し、同様のデータベース操作を実行できます。 効率モデルを使用してドキュメントを取得する方法の詳細については、「 読み取り操作 」を参照してください。

Lambda はクエリ ビルダ クラス DBにアクセスするためのファサードを提供し、データベース操作を実行できるようにします。 クラスへの静的インターフェースである ファサード は、構文をより簡潔にし、ランタイム エラーを回避し、テスト可能性を向上させます。

Lambda 統合では、コレクションにアクセスするためのDBメソッドtable()が提供されます。 コマンドと制約を指定するためのチェーンメソッド。 次に、最後にget()メソッドをチェーンしてメソッドを実行し、結果を取得します。 最初の一致する結果のみを検索するには、 get()メソッドではなくfirst()メソッドを連鎖させます。 Lambda MongoDB v 5.0以降、クエリ ビルダはstdClassオブジェクトとして結果を返します。

次の例は、クエリ ビルダを呼び出す構文を示しています。

DB::table('<collection name>')
// chain methods by using the "->" object operator
->get();

Tip

データベース接続の設定

DB::table()メソッドを使用する前に、アプリケーションのデフォルトのデータベース接続として MongoDB を指定していることを確認してください。 データベース接続を設定する手順については、クイック スタートの「 MongoDB 接続の構成 」の手順を参照してください。

MongoDB がアプリケーションのデフォルトのデータベースでない場合は、 DB::connection()メソッドを使用して MongoDB 接続を指定できます。 次のコードに示すように、 connection()メソッドに接続名を渡します。

$connection = DB::connection('mongodb');

このガイドでは、次のタイプのクエリ ビルダ操作の例を取り上げます。

  • 一致するドキュメントの取得

  • クエリ結果の変更

  • MongoDB 操作を使用したデータの取得

  • MongoDB 書込み操作を使用したデータの書込み

このガイドのコード例を実行するには、クイック スタートチュートリアル を完了して、Web アプリケーションを構成し、 サンプル データセット を MongoDB 配置にロードして、 コントローラー メソッドからサンプル コードを実行します。 期待されるコード出力を JSON ドキュメントとして確認するには、クイック スタートのオプションの「 JSON ドキュメントとして結果を表示する 」ステップに示されているtoJson()メソッドを使用します。

クエリ ビルダを使用して読み取りおよび書込み操作を実行するには、 Illuminate\Support\Facades\DBファサードをインポートしてクエリを作成します。

このセクションには、次の演算子カテゴリの読み取り操作のクエリ ビルダの例が含まれています。

次の例は、 where()クエリ ビルダ メソッドを使用して、 imdb.ratingフィールド値が正確に9.3であるドキュメントをmoviesコレクションから検索する方法を示しています。 クエリによって返される結果を確認するには、[ VIEW OUTPUTボタンをクリックします。

$result = DB::connection('mongodb')
->table('movies')
->where('imdb.rating', 9.3)
->get();
[
{ "title": "Cosmos",
"year": 1980,
"runtime": 60,
"imdb": {
"rating": 9.3,
"votes": 17174,
"id": 81846
},
"plot": "Astronomer Carl Sagan leads us on an engaging guided tour of the various elements and cosmological theories of the universe.",
...
},
{ "title": "The Shawshank Redemption",
"year": 1994,
"runtime": 142,
"imdb": {
"rating": 9.3,
"votes": 1521105,
"id": 111161
},
"plot": "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.",
...
},
{ "title": "The Real Miyagi",
"year": 2015,
"runtime": 90,
"imdb": {
"rating": 9.3,
"votes": 41,
"id": 2313306
},
"plot": "The life of the greatest karate master of a generation.",
...
}
]

このセクションの例では、次の論理条件操作を実行するために使用できるクエリビルダの構文を示します。

次の例では、 orWhere()クエリ ビルダ メソッドを連鎖させて、 _idフィールドの値がObjectId('573a1398f29313caabce9682')またはtitleフィールドの値が"Back to the Future"であるドキュメントをmoviesコレクションから検索する方法を示します。 :

$result = DB::connection('mongodb')
->table('movies')
->where('id', new ObjectId('573a1398f29313caabce9682'))
->orWhere('title', 'Back to the Future')
->get();

注意

上記のコードに示すように、クエリでidエイリアスを使用して、MongoDB ドキュメントの_idフィールドを表すことができます。 クエリ ビルダを使用して検索操作を実行すると、Lambda 統合によって_ididフィールド名の間が自動的に変換されます。 クエリ結果では、 _idフィールドはidとして表示されます。 これにより、Lambda との整合性が向上します。これは、各レコードがデフォルトでidという名前のプライマリキーを持っていることを前提としているためです。

この動作のため、ドキュメント内にid_idの 2 つの個別のフィールドを含めることはできません。

次の例は、 where()クエリ ビルダ メソッドを連鎖させて、 8.5より大きいimdb.rating値と1940より小さいyear値の両方に一致するドキュメントをmoviesコレクションから検索する方法を示しています。

$result = DB::connection('mongodb')
->table('movies')
->where('imdb.rating', '>', 8.5)
->where('year', '<', 1940)
->get();

Tip

Lambel との互換性のため、Lambel MongoDB v 5.1は、クエリフィルター内のネストされたフィールドにアクセスするために、矢印(-> )とドット( . )表記の両方をサポートしています。上記の例では、ドット表記を使用して imdb.rating のネストされたフィールドをクエリしています。これは 推奨構文です。

次の例では、 whereNot()クエリ ビルダ メソッドを呼び出して、 imdb.ratingの値が2より大きくないドキュメントに一致するドキュメントをmoviesコレクションから検索する方法を示します。 これは、 imdb.rating2以下であるすべてのドキュメントをマッチングすることと同じです。

$result = DB::connection('mongodb')
->table('movies')
->whereNot('imdb.rating', '>', 2)
->get();

次の例では、 where()クエリ ビルダ メソッドを連鎖させて、次の条件の両方に一致するドキュメントをmoviesコレクションから検索する方法を示します。 この例では、論理 OR グループをグループ化するために、 where()クエリ ビルダ メソッドの最初のパラメータとして包含を渡します。

  • imdb.rating の値が より大きい 8.5

  • year 値は1986または1996のいずれかです

$result = DB::connection('mongodb')
->table('movies')
->where('imdb.rating', '>', 8.5)
->where(function (Builder $query) {
return $query
->where('year', 1986)
->orWhere('year', 1996);
})->get();

このセクションの例は、次の範囲クエリと型チェック操作を使用して値を一致させるために使用できるクエリビルダの構文を示しています。

次の例は、 whereBetween()クエリ ビルダ メソッドを使用して、 99.5の間のimdb.rating値を含むドキュメントをmoviesコレクションから検索する方法を示しています。

$result = DB::connection('mongodb')
->table('movies')
->whereBetween('imdb.rating', [9, 9.5])
->get();
[
{ "title" "The Godfather", "imdb": { "rating": 9.2, "votes": 1038358, "id": 68646 }, ... },
{ "title": "Hollywood", "imdb": { "rating": 9.1, "votes": 511,"id": 80230 }, ... },
{ "title": "Cosmos", "imdb": { "rating": 9.3, "votes": 17174, "id": 81846 }, ... },
...
]

次の例は、 whereNull()クエリ ビルダ メソッドを使用して、 runtime値または フィールドを省略するドキュメントをmoviesコレクションから検索する方法を示しています。

$result = DB::connection('mongodb')
->table('movies')
->whereNull('runtime')
->get();

次の例は、 whereIn()クエリ ビルダ メソッドを使用して、指定されたセット内のtitle値の少なくとも 1 つと一致するドキュメントをmoviesコレクションから検索する方法を示しています。

$result = DB::table('movies')
->whereIn('title', ['Toy Story', 'Shrek 2', 'Johnny English'])
->get();
[
{ "title": "Toy Story", "year": 1995, "runtime": 81, ... },
{ "title": "Johnny English", "year": 2003, "runtime": 87, ... },
{ "title": "Shrek 2", "year" 2004, "runtime": 93, ... },
...
]

次の例では、 where()クエリ ビルダ メソッドを使用して、 released値がCarbonオブジェクトに指定されている15年 1 月2010であるドキュメントをmoviesコレクションから検索する方法を示します。

$result = DB::connection('mongodb')
->table('movies')
->where('released', Carbon::create(2010, 1, 15))
->get();

注意

日付クエリフィルターと結果の型

Lambda MongoDB v 5.0 以降、上記のコードに示すように、クエリフィルターとして渡される単一の オブジェクトは、UTCDateTime BSON値に変換されます。

クエリ結果では、MongoDB 内のUTCDateTime BSON 値がCarbonオブジェクトとして返されます。 Lambda 統合は、この変換を実行するときにデフォルトのタイムゾーンを適用します。

クエリフィルターで日付をCarbonオブジェクトとしてではなく、string として表するには、 whereDate()クエリビルダ メソッドを使用します。 次の例では、 moviesコレクションから、 released値が 1 月15日2010であり、日付を string として指定するドキュメントを検索します。

$result = DB::connection('mongodb')
->table('movies')
->whereDate('released', '2010-1-15')
->get();

次の例は、 where()クエリビルダ メソッドでlikeクエリ演算子を使用し、指定されたテキスト パターンを使用してmoviesコレクションからドキュメントを検索する方法を示しています。

テキストパターンには、次のワイルドカード文字と混合したテキストを含めることができます。

  • % 0 文字以上の文字に一致する

  • _ 単一の文字に一致する

$result = DB::table('movies')
->where('title', 'like', '%spider_man%')
->get();
[
{ "title": "Kiss of the Spider Woman", ... },
{ "title": "Spider-Man", ... },
{ "title": "Spider-Man 2", ...},
...
]

次のメソッドは、パターンを一致させるためクエリ演算子 を使用するのと同じ機能を提供します。

  • whereLike(): 指定されたパターンに一致します。 デフォルトでは、このメソッドは大文字と小文字を区別しない一致を実行します。 メソッドの最後のパラメータとしてtrueを渡すことで、大文字と小文字の区別を有効にすることができます。

  • whereNotLike(): フィールド値に指定されたstringパターンが含まれていないドキュメントと一致します。

次の例は、 whereLike()メソッドを使用して、大文字と小文字の区別が有効になっているパターン'Start%'と一致する値がtitleフィールドにあるドキュメントを一致させる方法を示しています。

$result = DB::connection('mongodb')
->table('movies')
->whereLike('title', 'Start%', true)
->get();
[
{ "title": "Start-Up", ... },
{ "title": "Start the Revolution Without Me", ... },
...
]

次の例は、 distinct()クエリ ビルダー メソッドを使用して、 moviesコレクション内のドキュメントのyearフィールドのさまざまな値をすべて検索する方法を示しています。

$result = DB::table('movies')
->distinct('year')->get();

このセクションの例では、集計を実行するために使用できるクエリ ビルダの構文を示します。 集計は、クエリ結果データのセットから値を計算する操作です。 集計を使用して、次の情報を計算して返すことができます。

次の例は、 groupBy()クエリ ビルダ メソッドを使用して、 runtimeフィールドの共有値でグループ化されたドキュメント データを取得する方法を示しています。 この例では、次の操作を連鎖させて、 Grated値を含み、かつ個別のruntime値ごとに 1 つの映画のtitleフィールドを含むmoviesコレクションのドキュメントを照合します。

  • where()メソッドを使用して、 ratedフィールド値が"G"であるドキュメントのみをマッチングする

  • groupBy()メソッドを使用して、 _idフィールドに割り当てられているruntimeフィールドの個別の値でデータをグループ化します

  • orderBy()メソッドを使用して、 runtimeフィールドでグループを並べ替えます

  • グループ化された結果内の最後のドキュメントのtitleデータを、 get()メソッドで指定して返します

Tip

groupBy()メソッドは MongoDB $group集計演算子と$lastアキュムレータ演算子を呼び出します。 これらの演算子の詳細については、サーバー マニュアルの$group(集計)を参照してください。

$result = DB::table('movies')
->where('rated', 'G')
->groupBy('runtime')
->orderBy('runtime', 'asc')
->get(['title']);
[
...
{
"_id": { "runtime": 64 },
"runtime": 64,
"title": "Stitch! The Movie"
},
{
"_id": { "runtime": 67 },
"runtime": 67,
"title": "Bartok the Magnificent"
},
{
"_id": { "runtime":68 },
"runtime": 68,
"title": "Mickey's Twice Upon a Christmas"
},
...
]

次の例は、 count()クエリ ビルダ メソッドを使用してmoviesコレクションに含まれるドキュメントの数を返す方法を示しています。

$result = DB::table('movies')
->count();

次の例は、 max()クエリ ビルダ メソッドを使用して、 moviesコレクション全体からruntimeフィールドの最大の数値を返す方法を示しています。

$result = DB::table('movies')
->max('runtime');

次の例は、 min()クエリ ビルダ メソッドを使用して、 moviesコレクション全体からyearフィールドの最小の数値を返す方法を示しています。

$result = DB::table('movies')
->min('year');

次の例は、 avg()クエリ ビルダ メソッドを使用して、 moviesコレクション全体からimdb.rating値の数値平均または算術平均を返す方法を示しています。

$result = DB::table('movies')
->avg('imdb.rating');

次の例は、 sum()クエリ ビルダ メソッドを使用して、 moviesコレクション全体からimdb.votes値の数値合計を返す方法を示しています。

$result = DB::table('movies')
->sum('imdb.votes');

次の例では、クエリに一致する結果からデータを集計する方法を示しています。 クエリは、 2000年以降のすべての映画に一致しており、 avg()メソッドを使用して、それらの一致のimdb.ratingの平均値を計算します。

$result = DB::table('movies')
->where('year', '>', 2000)
->avg('imdb.rating');

このセクションには、クエリ結果の順序と形式を変更する次の関数のクエリ ビルダの例が含まれています。

次の例は、 orderBy()クエリ ビルダ メソッドを使用して、 titleフィールドに指定されたフィルターに一致する結果をimdb.ratingの値で降順に配置する方法を示しています。

$result = DB::table('movies')
->where('title', 'like', 'back to the future%')
->orderBy('imdb.rating', 'desc')
->get();
[
{ "title": "Back to the Future", "imdb": { "rating":8.5,"votes":636511,"id":88763 }, ... },
{ "title": "Back to the Future Part II", "imdb": { "rating":7.8,"votes":292539,"id":96874 }, ... },
{ "title": "Back to the Future Part III", "imdb": {"rating":7.4,"votes":242390,"id":99088 }, ... },
...
]

次の例では、 skip()クエリ ビルダ メソッドを使用して、 titleフィールドに指定されたフィルターに一致する最初の 4 つの結果を除外する方法を示します。 year値の昇順でソートします。

$result = DB::table('movies')
->where('title', 'like', 'star trek%')
->orderBy('year', 'asc')
->skip(4)
->get();

次の例では、 project()クエリ ビルダ メソッドを使用して、 8.5よりも高いimdb.rating値を含むドキュメントを照合し、次のフィールド値のみを返す方法を示します。

  • 内の映画のタイトル title

  • cast配列フィールドの 2 番目から 4 番目の値(存在する場合)

  • ドキュメント_idフィールド(自動的に含まれる)

$result = DB::table('movies')
->where('imdb.rating', '>', 8.5)
->project([
'title' => 1,
'cast' => ['$slice' => [1, 3]],
])
->get();
[
{
"_id": { ... },
"title": "City Lights"
"cast": [
"Florence Lee",
"Harry Myers",
"Al Ernest Garcia"
],
},
{
"_id": { ... },
"title": "Modern Times",
"cast": [
"Paulette Goddard",
"Henry Bergman",
"Tiny Sandford"
]
},
{
"_id": { ... },
"title": "Casablanca"
"cast": [
"Ingrid Bergman",
"Paul Henreid",
"Claude Rains"
],
},
...
]

次の例では、 paginate()クエリ ビルダー メソッドを使用して、 movieコレクション全体を15ドキュメントの個別の結果セットに分割する方法を示します。 この例には、 imdb.votesフィールドの結果を降順で配置するための並べ替え順序と、結果に特定のフィールドのみを含むプロジェクションも含まれています。

$resultsPerPage = 15;
$projectionFields = ['title', 'runtime', 'imdb.rating'];
$result = DB::table('movies')
->orderBy('imdb.votes', 'desc')
->paginate($resultsPerPage, $projectionFields);

ページ分割の詳細については、「 クエリ ビルダの結果のページ分割 」を参照してください Lambda のドキュメント。

このセクションには、次の MongoDB 固有のクエリ操作の使用方法を示すクエリ ビルダの例が含まれています。

次の例は、 exists()クエリ ビルダ メソッドを使用して、フィールドrandom_reviewを含むドキュメントを一致させる方法を示しています。

$result = DB::table('movies')
->exists('random_review', true);

このクエリ演算子の詳細については、サーバー マニュアルの$existsを参照してください。

次の例は、 allクエリ演算子とwhere()クエリ ビルダ メソッドを使用して、指定されたすべてのフィールドを含むドキュメントを照合する方法を示しています。

$result = DB::table('movies')
->where('movies', 'all', ['title', 'rated', 'imdb.rating'])
->get();

このクエリ演算子の詳細については、サーバー マニュアルの$allを参照してください。

次の例は、 where()クエリビルダ メソッドでsizeクエリ演算子を渡し、5 つの要素だけの配列を含むdirectorsフィールドを含むドキュメントを一致させる方法を示しています。

$result = DB::table('movies')
->where('directors', 'size', 5)
->get();

このクエリ演算子の詳細については、サーバー マニュアルの$sizeを参照してください。

次の例では、 where()クエリビルダ メソッドでtypeクエリ演算子を渡し、 releasedフィールドに配列データ型に対応するタイプ4の値を含むドキュメントを照合する方法を示します。

$result = DB::table('movies')
->where('released', 'type', 4)
->get();

型コードとクエリ演算子の詳細については、サーバー マニュアルの$typeを参照してください。

次の例は、 where()クエリビルダ メソッドでmodクエリ演算子を渡し、 yearフィールドの偶数値に一致する式year % 2 == 0を使用してドキュメントを照合する方法を示しています。

$result = DB::table('movies')
->where('year', 'mod', [2, 0])
->get();

このクエリ演算子の詳細については、サーバー マニュアルの$modを参照してください。

次の例は、 where()クエリビルダ メソッドでREGEXクエリ演算子を渡し、指定された正規表現に一致するtitleフィールドを含むドキュメントを照合する方法を示しています。

$result = DB::connection('mongodb')
->table('movies')
->where('title', 'REGEX', new Regex('^the lord of .*', 'i'))
->get();

MongoDB の正規表現クエリの詳細については、サーバー マニュアルの$regexを参照してください。

次の例は、 whereRaw()クエリビルダー メソッドを使用して、MongoDB Query API 構文を使用して記述されたクエリ操作を実行する方法を示しています。

$result = DB::table('movies')
->whereRaw([
'imdb.votes' => ['$gte' => 1000 ],
'$or' => [
['imdb.rating' => ['$gt' => 7]],
['directors' => ['$in' => [ 'Yasujiro Ozu', 'Sofia Coppola', 'Federico Fellini' ]]],
],
])->get();

次のコードは、同等の MongoDB Query API 構文を示しています。

db.movies.find({
"imdb.votes": { $gte: 1000 },
$or: [{
imdb.rating: { $gt: 7 },
directors: { $in: [ "Yasujiro Ozu", "Sofia Coppola", "Federico Fellini" ] }
}]});

MongoDB Query API の詳細については、サーバー マニュアルの「 MongoDB Query API 」を参照してください。

次の例は、 where()クエリビルダ メソッドでelemMatchクエリ演算子を渡し、指定されたクエリ内の条件の 1 つ以上に一致する配列要素を含むドキュメントを検索する方法を示しています。

$result = DB::table('movies')
->where('writers', 'elemMatch', ['$in' => ['Maya Forbes', 'Eric Roth']])
->get();

MongoDB の正規表現クエリの詳細については、サーバー マニュアルの$elemMatch 演算子を参照してください。

次の例では、 timeout()メソッドを使用してカーソル操作の完了まで待機する最大期間を指定する方法を示します。

$result = DB::table('movies')
->timeout(2) // value in seconds
->where('year', 2001)
->get();

注意

この設定では、ミリ秒ではなく秒単位でmaxTimeMS値を指定します。 maxTimeMS値の詳細については、PHP ライブラリのドキュメントのMongoDBCollection::find()を参照してください。

このセクションの例では、クエリ ビルダの構文を使用して GeoJSON または座標ペア データに対して地理空間クエリを実行し、次のタイプのロケーションを検索できます。

重要

MongoDB で GeoJSON クエリを実行するには、コレクションに2dまたは2dsphereインデックスのいずれかを作成する必要があります。 地理空間インデックスの作成方法については、「 スキーマ ビルダ 」のガイドの「 地理空間インデックスの作成」セクションを参照してください。

MongoDB がサポートするGeoJSON オブジェクトの詳細については、サーバー マニュアルの「 GeoJSON オブジェクト」を参照してください。

次の例は、 nearクエリ演算子とwhere()クエリ ビルダ メソッドを使用して、GeoJSON ポイント オブジェクトから最大50メートルのロケーションを含むドキュメントを一致させる方法を示しています。

$results = DB::table('theaters')
->where('location.geo', 'near', [
'$geometry' => [
'type' => 'Point',
'coordinates' => [
-86.6423,
33.6054,
],
],
'$maxDistance' => 50,
])->get();

この演算子の詳細については、サーバー マニュアルの「 $near 演算子」を参照してください。

次の例は、 geoWithinクエリ演算子とwhere()クエリ ビルダ メソッドを使用して、指定されたPolygon GeoJSON オブジェクトの境界内のロケーションを含むドキュメントを照合する方法を示しています。

$results = DB::table('theaters')
->where('location.geo', 'geoWithin', [
'$geometry' => [
'type' => 'Polygon',
'coordinates' => [
[
[-72, 40],
[-74, 41],
[-72, 39],
[-72, 40],
],
],
],
])->get();

次の例は、 geoInstersectsクエリ演算子とwhere()クエリ ビルダ メソッドを使用して、指定されたLineString GeoJSON オブジェクトと交差するロケーションを含むドキュメントを照合する方法を示しています。

$results = DB::table('theaters')
->where('location.geo', 'geoIntersects', [
'$geometry' => [
'type' => 'LineString',
'coordinates' => [
[-73.600525, 40.74416],
[-72.600525, 40.74416],
],
],
])->get();

次の例では、 geoNear集計演算子とraw()クエリ ビルダ メソッドを組み合わせて、各一致の近接性情報などのメタデータを返す集計を実行する方法を示します。

$results = DB::table('theaters')->raw(
function (Collection $collection) {
return $collection->aggregate([
[
'$geoNear' => [
'near' => [
'type' => 'Point',
'coordinates' => [-118.34, 34.10],
],
'distanceField' => 'dist.calculated',
'maxDistance' => 500,
'includeLocs' => 'dist.location',
'spherical' => true,
],
],
]);
},
)->toArray();

この集計演算子の詳細については、サーバー マニュアルの「 $geoNear 演算子」を参照してください。

このセクションには、次の MongoDB 固有の書込み操作の使用方法を示すクエリ ビルダの例が含まれています。

v 4.7以降、 次のクエリ ビルダのメソッドのいずれかを使用して、アップサート操作を実行できます。

  • upsert(): このメソッドを使用すると、バッチ アップサートを実行して 1 回の操作で複数のドキュメントを変更または挿入できます。

  • update(): このメソッドを使用する場合、クエリフィルターに一致するすべてのドキュメントを更新するか、一致するドキュメントがない場合は 1 つのドキュメントを挿入するために、 upsertオプションを指定する必要があります。 このアップサート メソッドのみが v 4.6以前のバージョンではサポートされています。

upsert(array $values, array|string $uniqueBy, array|null $update)クエリ ビルダのメソッドは次のパラメータを受け入れます。

  • $values: 更新または挿入するドキュメントを指定するフィールドと値の配列。

  • $uniqueBy: 最初の配列パラメータでドキュメントを一意に識別するフィールドのリスト。

  • $update: 一致するドキュメントが存在する場合に更新するフィールドの任意のリスト。 このパラメーターを省略すると、Lambda 統合によってすべてのフィールドが更新されます。

以下の例では、 upsert()クエリ ビルダ メソッドを使用して、次の手順に基づいてドキュメントを更新または挿入する方法を示しています。

  • titleフィールドの値が'Inspector Maigret'recommendedフィールドの値がfalseruntimeフィールドの値が128であるドキュメントを指定します。

  • titleフィールドの値が'Petit Maman'recommendedフィールドの値がtrueruntimeフィールドの値が72であるドキュメントを指定します。

  • titleフィールドが操作範囲内のドキュメントを一意に識別することを示します。

  • 一致したドキュメントのrecommendedフィールドのみをアップデートします。

$result = DB::table('movies')
->upsert(
[
['title' => 'Inspector Maigret', 'recommended' => false, 'runtime' => 128],
['title' => 'Petit Maman', 'recommended' => true, 'runtime' => 72],
],
'title',
'recommended',
);

upsert()クエリ ビルダ メソッドは、操作によって更新、挿入、変更されたドキュメントの数を返します。

注意

upsert() メソッドは イベントをtriggerしません。 アップサート操作からイベントをtriggerするには、代わりに createOrFirst() メソッドを使用できます。

次の例は、 update()クエリビルダー メソッドとupsertオプションを使用して一致するドキュメントをアップデートするか、存在しない場合は指定されたデータでドキュメントを挿入する方法を示しています。 upsertオプションをtrueに設定し、かつドキュメントが存在しない場合、コマンドはデータとwhere()クエリ操作で指定されたtitleフィールドと値の両方を挿入します。

$result = DB::table('movies')
->where('title', 'Will Hunting')
->update(
[
'plot' => 'An autobiographical movie',
'year' => 1998,
'writers' => [ 'Will Hunting' ],
],
['upsert' => true],
);

update()クエリ ビルダ メソッドは、操作によって更新または挿入されたドキュメントの数を返します。

次の例は、 increment()クエリ ビルダ メソッドを使用して、一致したドキュメントのimdb.votesフィールドの値に3000を追加する方法を示しています。

$result = DB::table('movies')
->where('title', 'Field of Dreams')
->increment('imdb.votes', 3000);

increment()クエリ ビルダ メソッドは、操作によって更新されたドキュメントの数を返します。

Lambda 統合 v 4.8以降 また、 incrementEach()クエリ ビルダ メソッドを使用して、1 回の操作で複数の値を増加させることもできます。 incrementEach()次の例では、awards.wins imdb.votesメソッドを使用して、一致したドキュメントの フィールドと フィールドの値を増やします。

$result = DB::table('movies')
->where('title', 'Lost in Translation')
->incrementEach([
'awards.wins' => 2,
'imdb.votes' => 1050,
]);

注意

値がないフィールド、または一致したドキュメントに存在しないフィールドをincrement()メソッドまたはincrementEach()メソッドに渡すと、これらのメソッドは指定されたフィールドを増分値に初期化します。

次の例は、 decrement()クエリ ビルダ メソッドを使用して、一致したドキュメントのimdb.ratingフィールドの値から0.2を減算する方法を示しています。

$result = DB::table('movies')
->where('title', 'Sharknado')
->decrement('imdb.rating', 0.2);

decrement()クエリ ビルダ メソッドは、操作によって更新されたドキュメントの数を返します。

Lambda 統合 v 4.8以降 また、 decrementEach()クエリ ビルダ メソッドを使用して、1 回の操作で複数の値を減算することもできます。 decrementEach()次の例では、metacritic imdb.ratingメソッドを使用して、一致したドキュメントの フィールドと フィールドの値を減らします。

$result = DB::table('movies')
->where('title', 'Dunkirk')
->decrementEach([
'metacritic' => 1,
'imdb.rating' => 0.4,
]);

注意

値がないフィールド、または一致したドキュメントに存在しないフィールドをdecrement()メソッドまたはdecrementEach()メソッドに渡すと、これらのメソッドは指定されたフィールドを減算値に初期化します。

次の例は、 push()クエリビルダ メソッドを使用して、一致したドキュメントのcast配列フィールドに"Gary Cole"を追加する方法を示しています。

$result = DB::table('movies')
->where('title', 'Office Space')
->push('cast', 'Gary Cole');

push()クエリ ビルダ メソッドは、操作によって更新されたドキュメントの数を返します。

次の例は、 pull()クエリ ビルダ メソッドを使用して、クエリに一致するドキュメントのgenresフィールドから"Adventure"値を削除する方法を示しています。

$result = DB::table('movies')
->where('title', 'Iron Man')
->pull('genres', 'Adventure');

pull()クエリ ビルダ メソッドは、操作によって更新されたドキュメントの数を返します。

次の例は、 unset()クエリ ビルダ メソッドを使用して、クエリに一致するドキュメントからtomatoes.viewerフィールドと値を削除する方法を示しています。

$result = DB::table('movies')
->where('title', 'Final Accord')
->unset('tomatoes.viewer');

unset()クエリ ビルダ メソッドは、操作によって更新されたドキュメントの数を返します。

戻る

スキーマビルダ