如何使用 go mongo 驱动程序一起执行查找、区分和排序

Posted

技术标签:

【中文标题】如何使用 go mongo 驱动程序一起执行查找、区分和排序【英文标题】:How to perform Find, Distinct & Sort all together using go mongo driver 【发布时间】:2020-11-17 16:41:14 【问题描述】:

我有一个使用"labix.org/v2/mgo" library 生成的命令

err = getCollection.Find(bson.M).Sort("department").Distinct("department", &listedDepartment)

这工作正常。但是现在我正在转向官方的 golang mongo-driver "go.mongodb.org/mongo-driver/mongo" 并且我想在那个库中运行这个命令,但是我没有可以使用 Find then Sort then Distinct 的直接函数。如何使用这个 mongo-driver 来实现这个命令。变量listedDepartment 的类型为[]string。请建议我知道解决方案。

【问题讨论】:

【参考方案1】:

你可以使用Collection.Distinct(),但它还不支持排序:

// Obtain collection:
c := client.Database("dbname").Collection("collname")

ctx := context.Background()
results, err := c.Distinct(ctx, "department", bson.M)

它返回一个[]interface 类型的值。如果您知道它包含 string 值,则可以使用循环并键入断言来获取字符串值,如下所示:

listedDepartment = make([]string, len(results))
for i, v := range results 
    listedDepartment[i] = v.(string)

如果您需要对其进行排序,只需对切片进行排序:

sort.Strings(listedDepartment)

【讨论】:

以上是关于如何使用 go mongo 驱动程序一起执行查找、区分和排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用struct使用mongo-go-driver的更新功能

PHP mongo 查找字段以

如何使用连接池将我的 mgo 会话转换为 mongo-go-driver 客户端?

如何使用查找和更新编写 mongo 请求

如何使用Mongo Java驱动程序从集合中检索随机文档

Go MongoDB官方数据库驱动之增删改查