检索不同值
概述
在本指南中,您可以学习如何检索单个集合中指定字段的唯一值。
示例数据
本指南中的示例使用以下内容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)
提示
不存在的数据库和集合
当您执行写操作时,如果必要的数据库和集合不存在,服务器将隐式创建它们。
每个文档都包含对大学课程的描述,包括课程标题、系和招生人数。这些项对应于每个文档中 title
、department
和 enrollment
字段。
不同的
要检索单个集合中指定字段的唯一值,请将以下参数传递给 Distinct()
方法
您想获取唯一值的字段名称
一个
非空
查询过滤器,指定要匹配的文档
提示
如果您指定一个空的查询过滤器,则 Distinct()
方法将在集合中的所有文档中搜索唯一值。
修改行为
您可以通过传递一个 DistinctOptions
来修改 Distinct()
方法的行为。如果您未指定 DistinctOptions
,驱动程序将使用每个选项的默认值。
DistinctOptions
类型允许您使用以下方法配置选项
方法 | 描述 |
---|---|
SetCollation() | 在排序结果时使用的语言排序类型。 默认值: nil |
SetMaxTime() | 查询在服务器上可以运行的最大时间。 默认值: nil |
示例
以下示例匹配具有小于 50
的 enrollment
字段值的文档,并使用 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 文档
要了解本指南中讨论的任何方法或类型,请参阅以下 API 文档