Docs Menu
Docs Home
/ / /
Go
/ / /

返された結果をスキップする

項目一覧

  • 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))
}

集計パイプラインに $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))
}

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

  • クエリを指定する

  • Retrieve Data

  • 結果を並べ替える

  • 集計

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

戻る

結果を並べ替える