Docs Menu

Docs HomeGo

返される結果の数を制限する

項目一覧

  • Overview
  • Limit
  • 複数のオプション
  • 集計
  • 詳細情報

このガイドでは、読み取り操作から返されるドキュメントの数を制限する方法を学習できます。

このガイドの例を実行するには、次のスニペットを使用して、これらのドキュメントを tea.ratingsコレクションにロードします。

coll := client.Database("tea").Collection("ratings")
docs := []interface{}{
bson.D{{"type", "Masala"}, {"rating", 10}},
bson.D{{"type", "Assam"}, {"rating", 5}},
bson.D{{"type", "Oolong"}, {"rating", 7}},
bson.D{{"type", "Earl Grey"}, {"rating", 8}},
bson.D{{"type", "English Breakfast"}, {"rating", 5}},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))

Tip

存在しないデータベースとコレクション

書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。

各ドキュメントには、 フィールドとtype ratingフィールドに対応するお茶の種類の評価が含まれています。

注意

各例ではObjectID値が切り捨てられます。この値はドライバーが個別に生成するためです。

クエリから返されるドキュメントの数を制限するには、返されるドキュメントの数を読み取り操作のオプションのSetLimit()メソッドに渡します。

次の読み取り操作メソッドの最後のパラメーターとしてオプションを指定します。

  • Find()

  • CountDocuments()

  • gridfs.Bucket.Find()

制限が0であるか、一致したドキュメントの数を超えると、メソッドはすべてのドキュメントを返します。 制限が負の数の場合、メソッドは制限が負の数の絶対値であるかのように動作し、ドキュメントを検索した後にカーソルを閉じます。

次の例では、2 つのドキュメントを返す方法を示しています。

filter := bson.D{}
opts := options.Find().SetLimit(2)
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}

SetLimit()メソッドと並行して他のオプションを構成する場合、オプションをリストする順序に関係なく、ドライバーは最後に制限を実行します。

次の例では、 Find()メソッドを使用して、次のアクションを順番に実行します。

  • ratingフィールドを降順でソートします

  • 最初のドキュメントをスキップする

  • 残りのドキュメントの最初の 2 つのドキュメントを返します

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"rating", -1}}).SetLimit(2).SetSkip(1)
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}

Tip

次のオプション宣言のいずれかを使用しても、同じ結果が生じます。

multiOptions := options.Find().SetSort(bson.D{{"rating", -1}}).SetSkip(1).SetLimit(2)
multiOptions := options.Find().SetLimit(2).SetSort(bson.D{{"rating", -1}}).SetSkip(1)
multiOptions := options.Find().SetLimit(2).SetSkip(1).SetSort(bson.D{{"rating", -1}})
multiOptions := options.Find().SetSkip(1).SetSort(bson.D{{"rating", -1}}).SetLimit(2)
multiOptions := options.Find().SetSkip(1).SetLimit(2).SetSort(bson.D{{"rating", -1}})

また、集計パイプラインで制限を指定するには、 $limitステージを含めます。

次の例では、3 つのドキュメントを返す方法を示しています。

limitStage := bson.D{{"$limit", 3}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{limitStage})
if err != nil {
panic(err)
}
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}

上記で説明されている操作の詳細については、次のガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

←  返された結果をスキップする返すフィールドを指定する →
フィードバックを送る
© 2022 MongoDB, Inc.

会社概要

© 2022 MongoDB, Inc.