返される結果の数を制限する
Overview
このガイドでは、読み取り操作から返されるドキュメントの数を制限する方法を学習できます。
サンプル データ
このガイドの例を実行するには、次のスニペットを使用して、これらのドキュメントを 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
値が切り捨てられます。この値はドライバーが個別に生成するためです。
Limit
クエリから返されるドキュメントの数を制限するには、返されるドキュメントの数を読み取り操作のオプションの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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。