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

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

$maxN

グループ内の最大値である n 要素の集計を返します。グループに含まれる要素が n 未満の場合、$maxN はグループ内のすべての要素を返します。

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

注意

$maxN のその他の用途

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

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

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

input

式

グループ内の各要素に対して評価された式。 $maxN は最大 n 値を保持します。

n

式

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

$maxNが異なる型の値を比較する場合、型の順序はBSON比較順序に従います。

$maxN は null 値と欠損値を除外します。

次の集計は、$maxN が null 値と欠損値を処理する方法を示しています。

db.aggregate( [
{
$documents: [
{ title: "Fight Club", genre: "Drama", rating: 8.9 },
{ title: "The Matrix", genre: "Drama", rating: 8.7 },
{ title: "The Green Mile", genre: "Drama", rating: 8.5 },
{ title: "Magnolia", genre: "Drama" },
{ title: "Dogma", genre: "Drama", rating: null }
]
},
{
$group: {
_id: "$genre",
topFourRatings: {
$maxN: {
input: "$rating",
n: 4
}
}
}
}
] )
[
{
_id: 'Drama',
topFourRatings: [ 8.9, 8.7, 8.5 ]
}
]

この例では、次のことが行われます。

  • $documents は、映画の評価を含むリテラル ドキュメントを作成します。

  • $groupはドキュメントをgenreでグループ化します。 この例ではgenre 、 Dramaは 1 つのみです。

  • Magnolia には null の rating があり、Dogma には null の rating があります。両方の値がフィルタリングで除外されます。

  • 有効な評価は 3 ドキュメントのみにあるため、n = 4 であっても、$maxN は 3 値を返します。

グループから最上位の 要素を返すには、 $maxNまたは$topN を使用します。これらの選択は、入力ドキュメントがすでにソートされているかどうかによって異なります。n

  • 入力ドキュメントがすでにソートされている場合は、$maxN を使用して最大の n 値を返します。

  • 上位のn 要素を同時にソートして選択する必要がある場合は、 を使用して 1$topN つのアキュムレータで両方を実行します。

このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

$maxNアキュムレータを使用すると、1 年に公開された映画の最高の IMDb 評価を 3 つ見つけることができます。

db.movies.aggregate( [
{
$match: {
year: 1999,
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: 1999,
topThreeRatings: {
$maxN: {
input: "$imdb.rating",
n: 3
}
}
}
}
] )

先行するパイプライン:

  • $match1999imdb.ratingを使用して、 フィールドを持つ にリリースされた映画をフィルタリングします。

  • 一致するすべてのドキュメントを _id: 1999 を使用して 1 つのグループにグループ化します。

  • $maxN の input として "$imdb.rating" を指定します。

  • $maxN を使用して、n: 3 の最高評価を 3 つ返します。

$maxNアキュムレータを使用すると、一連の年の各年で最高評価の 3 つの映画を見つけることができます。

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2000, 2001 ] },
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: "$year",
topThreeRatings: {
$maxN: {
input: "$imdb.rating",
n: 3
}
}
}
},
{ $sort: { _id: 1 } }
] )

先行するパイプライン:

  • $match1999を使用して、 、2000 、または にリリースされ、2001 imdb.ratingフィールドがある映画をフィルタリングします。

  • $groupを使用して映画をyear でグループ化します。

  • $maxN の input として "$imdb.rating" を指定します。

  • $maxN を使用して、n: 3 の年間最高評価を 3 つ返します。

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

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

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2000, 2001 ] },
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: { year: "$year" },
topRatedMovies: {
$maxN: {
input: "$imdb.rating",
n: { $cond: {
if: { $eq: [ "$year", 2001 ] },
then: 3,
else: 1
} }
}
}
}
},
{ $sort: { "_id.year": 1 } }
] )

先行するパイプライン:

  • 1999、2000、または 2001 にリリースされた映画のうち、imdb.ratingフィールドを持つものをフィルタリングします。

  • 映画を year でグループ化します。

  • 式を使用して、 $cond3年は 評価を返し、その他すべての年は2001 評価を返します。1

出力では、2001 はそれぞれ 3 つの評価を返し、1999 と 2000 はそれぞれ 1 つの評価を返します。

このページを評価