定義
指定ソート順に従って、ウィンドウ内の最下位の要素を返します。
注意
曖昧さ回避
このページでは、ウィンドウ関数として使用する場合の$bottom について説明します。次の他のコンテキストでは を使用することもできます。$bottom
$bottom (expression operator)は、指定されたソート順序に基づいて配列の最後の要素を返します。$bottom (accumulator)は、指定されたソート順に従って、グループ内の最下位の要素を返します。
構文
{ $setWindowFields: { ... output: { <field>: { $bottom: { sortBy: { <field1>: <sort order>, <field2>: <sort order> ... }, output: <expression> } } } } }
フィールド | 必要性 | 説明 |
|---|---|---|
sortBy | 必須 |
|
出力 | 必須 | ウィンドウ内の各要素の出力を指定します。任意の式を指定できます。 |
動作
NULL および欠損値
$bottomは、null 値をフィルタリングで除外しません。$bottom欠落値を null に変換します。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
一定期間にわたる最低評価映画への相対的評価の計算
この例では、 $bottom をウィンドウ関数として使用して、同じ年の最低評価映画に対する現在のドキュメントの評価を計算します。各映画ドキュメントには、その映画の評価と、同じ年の最低評価映画と比較してその映画の評価がどの程度高いかを示す計算フィールドが含まれています。
db.movies.aggregate( [ { $match: { year: { $in: [ 1980, 1981, 1982 ] }, "imdb.rating": { $exists: true, $ne: null }, genres: "Family", rated: "PG" } }, { $setWindowFields: { partitionBy: "$year", output: { lowestRatedInYear: { $bottom: { output: { title: "$title", rating: "$imdb.rating" }, sortBy: { "imdb.rating": -1 } }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, rating: "$imdb.rating", lowestRatedInYear: 1, ratingAboveWorst: { $subtract: [ "$imdb.rating", "$lowestRatedInYear.rating" ] } } }, { $limit: 10 } ] )
この例では、次のことが行われます。
$matchステージでは、1980 - の PG 指定のファミリー映画をフィルタリングします。1982$setWindowFieldsはドキュメントをyearで分割します。$bottomは、各パーティション内の最低評価の映画を、titleフィールドとratingフィールドを含む埋め込みドキュメントとして返します。$projectratingAboveWorstは、各映画の評価から最低評価を減算して を計算し、各映画が 1 年で最低のパフォーマンスをどれだけ評価しているかを示します。$limit出力を 10 ドキュメントに制限します。
このアプローチでは、すべての個々の映画ドキュメントが保持され、各 のその年の最低パフォーマンスとの比較が含まれます。