Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$limit(集計ステージ)

$limit

パイプライン の次のステージに渡されるドキュメントの数を制限します。

次の環境でホストされる配置には $limit を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$limitステージのプロトタイプ形式は次のとおりです。

{ $limit: <positive 64-bit integer> }

$limit 渡すドキュメントの最大数を指定する正の整数を取ります。

注意

$limit パイプライン集計には 64 ビットの整数制限があります。MongoDB は、値がこの制限を超えると、無効な引数エラーを返します。

$limit ステージを次のいずれかで使用する場合、

結果を $limit ステージに渡す前に、一意の値を含むフィールドを 1 つ以上ソートの中に含めるようにします。

重複する値を含むフィールドをソートすると、特にコレクションが書込み (write) をアクティブに受信している場合、複数回実行時に重複フィールドに対して異なるソート順序が返されることがあります。

並べ替えの整合性を保証する最も簡単な方法は、並べ替えクエリに_idフィールドを含めることです。

それぞれの詳細については、以下を参照してください。

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

次の例で考えてみます。

db.movies.aggregate([
{ $limit : 5 }
])

この操作は、パイプラインによって渡された最初の 5 個のドキュメントのみを返します。$limit は、渡すドキュメントの内容には影響しません。

このページのC#の例では、Atlasサンプルデータセットsample_mflixデータベースを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDB .NET/ C#ドライバーのドキュメントの「 開始 」を参照してください。

次の Movie クラスは、sample_mflix.movies コレクション内のドキュメントをモデル化します。

[BsonIgnoreExtraElements]
public class Movie
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("title")]
public string Title { get; set; } = null!;
[BsonElement("year")]
public int? Year { get; set; }
[BsonElement("runtime")]
public int? Runtime { get; set; }
[BsonElement("rated")]
public string? Rated { get; set; }
[BsonElement("metacritic")]
public int Metacritic { get; set; }
[BsonElement("plot")]
public string? Plot { get; set; }
[BsonElement("type")]
public string? Type { get; set; }
[BsonElement("cast")]
public string[]? Cast { get; set; }
[BsonElement("directors")]
public string[]? Directors { get; set; }
[BsonElement("writers")]
public string[]? Writers { get; set; }
[BsonElement("imdb")]
public ImdbData? Imdb { get; set; }
}

MongoDB .NET/ C#ドライバーを使用して$limit ステージを集計パイプラインに追加するには、 PipelineDefinitionオブジェクトで Limit() メソッドを呼び出します。

次の例では、映画をタイトル別にソートし、結果を最初の 5 ドキュメントに制限するパイプラインステージを作成します。

var pipeline = new EmptyPipelineDefinition<Movie>()
.Sort(Builders<Movie>.Sort.Ascending(m => m.Title))
.Limit(5);
{"_id": "...", "title": "!Women Art Revolution", "runtime": "...", "rated": "...", "metacritic": "...", "imdb": "..."}
{"_id": "...", "title": "#chicagoGirl: The Social Network Takes on a Dictator", "runtime": "...", "rated": "...", "metacritic": "...", "imdb": "..."}
{"_id": "...", "title": "$", "runtime": "...", "rated": "...", "metacritic": "...", "imdb": "..."}
{"_id": "...", "title": "$9.99", "runtime": "...", "rated": "...", "metacritic": "...", "imdb": "..."}
{"_id": "...", "title": "'71", "runtime": "...", "rated": "...", "metacritic": "...", "imdb": "..."}

MongoDB Node.jsドライバーを使用して $limit ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $limit 演算子を使用します。

次の例では、返されるドキュメントの数を 10 に制限するパイプラインステージを作成します。次に、この例は集計パイプラインを実行します。

const pipeline = [{ $limit: 10 }];
const cursor = collection.aggregate(pipeline);
return cursor;

注意

$sort$limitに先行し、途中にドキュメント数を変更するステージがない場合、オプティマイザは$limit$sortに統合することができます。 これにより、 $sort操作の進行中に上位 のn結果のみが保持できます。ここでは、 nは指定された制限であり、MongoDB はメモリにn個の項目のみを保存するだけで済むようになります。 この最適化は、 allowDiskUsetrueで、かつn項目が集計メモリの制限 を超えている場合でも、引き続き適用されます。

$limit の使用方法を完全な例で学ぶには、フィルターデータチュートリアルを参照してください。

戻る

$indexStats

ルール バッジを取得する

「データ変換の基礎」を無料でマスターしましょう!

詳細

項目一覧