返された結果をスキップする
Overview
このガイドでは、読み取り操作から返された指定された数の結果をスキップする方法を学習できます。
サンプル データ
このガイドの例では、 courses
コレクション内のドキュメントのモデルとして、次の Course
構造体を使用します。
type Course struct { Title string Enrollment int32 }
このガイドの例を実行するには、次のスニペットを使用してこれらのドキュメントをdb.courses
コレクションにロードします。
coll := client.Database("db").Collection("courses") docs := []interface{}{ Course{Title: "World Fiction", Enrollment: 35}, Course{Title: "Abstract Algebra", Enrollment: 60}, Course{Title: "Modern Poetry", Enrollment: 12}, Course{Title: "Plate Tectonics", Enrollment: 45}, } result, err := coll.InsertMany(context.TODO(), docs)
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、 フィールドとtitle
enrollment
フィールドに対応する、コース名と最大登録者数を含む大学コースの説明が含まれています。
スキップ
クエリから返された結果の指定した数をスキップするには、スキップするドキュメント数を読み取り操作のオプションのSetSkip()
メソッドに渡します。
次の読み取り操作は、オプション オブジェクトをパラメーターとして受け取ります。
Find()
FindOne()
CountDocuments()
gridfs.Bucket.Find()
ドキュメントの数がクエリに一致するドキュメントの数を超える場合、そのクエリはドキュメントを返しません。
Tip
SetSkip()
メソッドに負の数を渡すと、ランタイム エラーが発生します。
検索操作では、フィールドでソートされていない自然な順序でドキュメントが返されます。 無作為なドキュメントのスキップを回避するには、スキップ オプションを設定する前に、 SetSort()
メソッドを使用して一意の値を持つフィールドでドキュメントをソートします。
例
次の例では、次の動作でFind()
操作を実行します。
enrollment
フィールドの昇順で結果をソートします最初の 2 つのドキュメントをスキップします
opts := options.Find().SetSort(bson.D{{"enrollment", 1}}).SetSkip(2) cursor, err := coll.Find(context.TODO(), bson.D{}, opts) var results []Course if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) }
{"title":"Plate Tectonics","enrollment":45} {"title":"Abstract Algebra","enrollment":60}
集計
集計パイプラインに $skipステージを含めてドキュメントをスキップすることもできます。
例
次の例では、次の動作でAggregate()
操作を実行します。
enrollment
フィールドの降順で結果を並べ替えます最初のドキュメントをスキップします
sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}}}} skipStage := bson.D{{"$skip", 1}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage, skipStage}) if err != nil { panic(err) } var results []Course if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) }
{"title":"Plate Tectonics","enrollment":45} {"title":"World Fiction","enrollment":35} {"title":"Modern Poetry","enrollment":12}
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。