跳过返回结果
概述
在本指南中,您可以学习如何跳过读取操作中指定数量的返回结果。
示例数据
本指南中的示例使用以下Course
结构作为 courses
集合中文档的模型
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)
提示
不存在的数据库和集合
当您执行写入操作且必要的数据库和集合不存在时,服务器会隐式创建它们。
每个文档都包含一个大学课程的描述,包括课程标题和最大入学人数,对应于 title
和 enrollment
字段。
跳过
要跳过查询返回的指定数量的结果,将您想要跳过的文档数量传递给读取操作的选项中的 SetSkip()
方法。
以下读取操作接受一个选项对象作为参数
Find()
FindOne()
CountDocuments()
gridfs.Bucket.Find()
如果文档数量超过查询的匹配文档数量,则该查询不返回任何文档。
提示
将负数传递给 SetSkip()
方法会导致运行时错误。
查找操作以非排序的顺序返回文档,不按任何字段排序。为了避免跳过随机文档,在使用跳过选项之前,使用 SetSort()
方法对具有唯一值的字段上的文档进行排序。
示例
以下示例执行了一个具有以下行为的 Find()
操作
按
enrollment
字段升序排序结果跳过前两个文档
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 文档