Finder 查询器
通过 Finder() 方法获取一个新的泛型的查询器对象,即 Finder[T]。通过 Finder[T] 的方法,我们能够执行相关的查询操作。
查询单个文档
go
user, err := userColl.Finder().Filter(query.Id("60e96214a21b1b0001c3d69e")).FindOne(context.Background())FindOne方法用于查询单个文档。user为指定的泛型类型的指针对象,即*User。通过
Filter方法,我们可以指定查询条件。该方法接受的参数类型any,意味着允许传入任意类型的参数(但是必须是合法的查询条件)。在上面的例子中,query.Id("60e96214a21b1b0001c3d69e")用于指定查询条件为_id等于60e96214a21b1b0001c3d69e。更多的查询条件构建可以参考 query 包。
查询多个文档
go
users, err := userColl.Finder().Filter(query.In("_id", "60e96214a21b1b0001c3d69e", "80e96214a21b1b0001c3d70e")).Find(context.Background())Find方法用于查询多个文档。users为指定的泛型类型的指针对象的切片,即[]*User。
统计文档数量
go
count, err := userColl.Finder().
Filter(query.NewBuilder().Gt("age", 18).Lt("age", 24).Build()).
Count(context.Background())Count方法用于统计文档数量。count为int64类型。
Distinct 查询
go
// v1
//result, err := userColl.Finder().Distinct(context.Background(), "age")
//
//// 你可以使用 DistinctWithParse 方法来解析结果到一个切片
//ageSlice := make([]int, 0)
//err := userColl.Finder().DistinctWithParse(context.Background(), "age", &ageSlice)
// v2
distinctResult := userColl.Finder().Distinct(context.Background(), "age")
if distinctResult.Err() != nil {
panic(distinctResult.Err())
}
// 你可以使用 DistinctWithParse 方法来解析结果到一个切片
ageSlice := make([]int, 0)
err := userColl.Finder().DistinctWithParse(context.Background(), "age", &ageSlice)Distinct方法用于查询指定字段的唯一值。mongo-driver v1返回的result为[]any类型,而mongo-driver v2返回的则是*mongo.DistinctResult类型。如果你想要解析结果到一个切片,你可以使用
DistinctWithParse方法。该方法接受一个指向切片的指针作为参数,用于解析结果。