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

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

$firstN

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

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

注意

曖昧さ回避

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

次の他のコンテキストでは $firstN を使用することもできます。

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

input

式

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

n

式

$firstNがグループから返す要素の数。グループキーに基づいてn を動的に設定する例については、「 グループキーに基づいて n を設定 」を参照してください。

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

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

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

一般に、

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

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

このページの例では、movies sample_mflixサンプルデータセットの コレクションを使用します。サンプルデータセットをMongoDBデプロイにロードする 方法については、「 Atlas デプロイへのサンプル データのインポート 」を参照してください。

$firstNアキュムレータを使用して、1 つのジャンル内の最初の 3 つの映画を見つけることができます。

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

先行するパイプライン:

  • $matchHorrorgenresを使用して、 が 配列に含まれる映画に結果をフィルタリングします。

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

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

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

  • $firstN を使用して、n: 3 を持つ Horror ジャンルの最初の 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 }
] )

先行するパイプライン:

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

  • 結果を 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 映画を返します。

このページを評価