AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$firstN(アキュムレータ演算子)

$firstN

グループ内の最初の n 個の要素の集計を返します。結果は、グループ化ステージへの入力データに定義されたソート順序がある場合に限り有意義です。グループに n 個未満の要素が含まれている場合、$firstN はグループ内のすべての要素を返します。

$firstN アキュムレータは次のステージで使用可能です。

注意

曖昧さ回避

このページでは、$firstN をアキュムレータとして使用する場合について説明します。アキュムレータは、入力ドキュメントのグループ全体で、合計、最大値、最小値などの単一の集計値を返します。

$firstN は、これらの他のコンテキストでも使用できます。

{
$firstN:
{
input: <expression>,
n: <expression>
}
}
フィールド
タイプ
説明

input

式

入力グループの各ドキュメントで、input 式が評価されます。そして、最初の n 件の結果が保持されます。

n

式

The number of elements that $firstN returns from the group. For an example of setting n dynamically based on the group key, see Set n Based on the Group Key.

  • $firstN は、null 値をフィルタリングで除外しません。

  • $firstN 欠落値を null に変換します。

$firstNと$topNのどちらのアキュムレータでも同様の結果が得られます。

一般に、

  • $groupに取り込まれるドキュメントがすでに順序付けられている場合は、 $firstNを使用する必要があります。

  • 上位のn要素をソートして選択している場合、 $topNを使用すると 1 つのアキュムレータで両方のタスクを実行できます。

The examples on this page use the movies collection in the sample_mflix sample dataset. To learn how to load the sample dataset into your MongoDB deployment, see Import Sample Data Into Your Atlas Deployment.

$firstN アキュムレータを使用すると、1つのジャンル内の最初の3本の映画を検索できます。

db.movies.aggregate( [
{
$match: { genres: "Horror" }
},
{
$sort: { year: 1 }
},
{
$group:
{
_id: "Horror",
firstThreeMovies:
{
$firstN:
{
input: [ "$title", "$year" ],
n: 3
}
}
}
}
] )

以前のパイプライン:

  • $match を使用して、Horror が genres 配列に含まれている映画に絞り込み、結果をフィルターします。

  • 結果を year で昇順にソートします。

  • すべての結果ドキュメントを 1 つのグループにまとめます。

  • を使用して$firstN input : ["$title", "$year"]に入力するフィールドを指定します。

  • $firstN を使用して、Horror ジャンルでn: 3 を含む最初の3つのドキュメントを返します。

$firstN アキュムレータを使用して、各ジャンルの最初の n 個の入力フィールドを検索できます。

db.movies.aggregate( [
{
$unwind: "$genres"
},
{
$sort: { year: 1 }
},
{
$group:
{
_id: "$genres",
movies:
{
$firstN:
{
input: [ "$title", "$year" ],
n: 3
}
}
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

以前のパイプライン:

  • $unwind を使用して、genres 配列内の各ジャンルに個別のドキュメントを作成します。

  • 結果を year で昇順にソートします。

  • $groupを使用して結果をgenresでグループ化します。

  • $firstN を使用して、n: 3 とともに各ジャンルの最初の 3 つのドキュメントを返します。

  • を使用して$firstN input : ["$title", "$year"]に入力するフィールドを指定します。

  • 可読性を向上させるため、出力を 5 ドキュメントに制限します。

グループ キーに基づいて、n の値をダイナミックに割り当てることができます。この例では、$cond 式は rated フィールドを使用して n の値を変更します。

db.movies.aggregate([
{ $match: { rated: { $in: ["G", "PG", "PG-13", "R"] } } },
{ $sort: { title: 1 } },
{
$group:
{
_id: {"rated": "$rated"},
movies:
{
$firstN:
{
input: "$title",
n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } }
}
}
}
}
] )

以前のパイプライン:

  • 評価がG、PG、PG-13、Rのいずれかである映画のフィルター。

  • 結果を title でアルファベット順にソートします。

  • 映画を rated (映画評価) でグループ化します。

  • $cond 式を使用して、PGレートの映画には 3 本の映画を返し、その他のレートの映画には 1 本の映画を返します。

出力では、PG の評価は 3 本の映画を返します。一方、G、PG-13¡および R の評価はそれぞれ 1 本の映画を返します。

このページを評価