文档菜单
文档首页
/ / /
Go 驱动程序
/ / /

跳过返回结果

在本页面上

  • 概述
  • 跳过
  • 聚合
  • 附加信息

在本指南中,您可以学习如何跳过读取操作中指定数量的返回结果。

本指南中的示例使用以下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)

提示

不存在的数据库和集合

当您执行写入操作且必要的数据库和集合不存在时,服务器会隐式创建它们。

每个文档都包含一个大学课程的描述,包括课程标题和最大入学人数,对应于 titleenrollment 字段。

要跳过查询返回的指定数量的结果,将您想要跳过的文档数量传递给读取操作的选项中的 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 文档

返回

排序结果