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

检索不同值

本页

  • 概述
  • 示例数据
  • 不同
  • 修改行为
  • 更多信息
  • API文档

在本指南中,您可以学习如何检索单个集合中指定字段的唯一值。

本指南中的示例使用以下内容Course 结构作为 courses 集合中文档的模型

type Course struct {
Title string
Department string
Enrollment int32
}

要运行示例,请使用以下代码片段将示例数据加载到 db.courses 集合中

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "World Fiction", Department: "English", Enrollment: 35},
Course{Title: "Abstract Algebra", Department: "Mathematics", Enrollment: 60},
Course{Title: "Modern Poetry", Department: "English", Enrollment: 12},
Course{Title: "Plate Tectonics", Department: "Earth Science", Enrollment: 30},
}
result, err := coll.InsertMany(context.TODO(), docs)

提示

不存在的数据库和集合

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

每个文档都包含对大学课程的描述,包括课程标题、系和招生人数。这些项对应于每个文档中 titledepartmentenrollment 字段。

要检索单个集合中指定字段的唯一值,请将以下参数传递给 Distinct() 方法

  • 您想获取唯一值的字段名称

  • 一个 非空 查询过滤器,指定要匹配的文档

提示

如果您指定一个空的查询过滤器,则 Distinct() 方法将在集合中的所有文档中搜索唯一值。

您可以通过传递一个 DistinctOptions 来修改 Distinct() 方法的行为。如果您未指定 DistinctOptions,驱动程序将使用每个选项的默认值。

DistinctOptions 类型允许您使用以下方法配置选项

方法
描述
SetCollation()
在排序结果时使用的语言排序类型。
默认值:nil
SetMaxTime()
查询在服务器上可以运行的最大时间。
默认值:nil

以下示例匹配具有小于 50enrollment 字段值的文档,并使用 Distinct() 方法打印 department 字段的唯一值。

results, err := coll.Distinct(context.TODO(), "department", bson.D{{"enrollment", bson.D{{"$lt", 50}}}})
if err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}
Earth Science
English

要获取检索唯一值的可运行示例,请参阅检索字段的唯一值.

要了解如何构建查询过滤器,请参阅 指定查询。

要了解本指南中讨论的任何方法或类型,请参阅以下 API 文档

  • Distinct()

  • DistinctOptions

返回

数据游标