如何使用Golang MongoDB驱动程序查询数据?
我尝试了以下代码:
db.Collection("products").Find(nil, bson.M{}, &options.FindOptions{Sort: "-price"})
但是我遇到了这个错误:
无法将字符串转换为BSON文档:WriteString只能在定位于元素或值的情况下编写,但是定位于顶级
我不知道该向Sort变量传递什么,因为它是一个interface {}。
尝试下面的代码
findOptions := options.Find()
// Sort by `price` field descending
findOptions.SetSort(bson.D{{"price", -1}})
db.Collection("products").Find(nil, bson.D{}, findOptions)
我无法将 bson.D
传递给 options(这会导致错误),
但是下面的代码对我有效:
queryOptions := options.FindOneOptions{}
queryOptions.SetSort(bson.D{{"priority", -1}, {"last_error_time", 1}})
sResult := collection.FindOne(context.TODO(), queryFilter, &queryOptions)
在尝试解决相关问题时,我遇到了一些注意事项:
如果要按多个字段进行排序,请确保使用bson.D而不是bson.M,因为bson.M不会保留顺序。
如果要编程构建多个排序字段,请尝试将bson.E附加到bson.D中。
与dassum一样,按照mongo文档的建议,将bson.M{}传递为空过滤器。
应用:
sort := bson.D{}
for _, example := examples {
sort = append(sort, bson.E{example, 1})
}
findOptions.SetSort(sort)
db.Collection("products").Find(nil, bson.D{}, findOptions)
另外需要注意的一点是,确保字段名称的映射正确。在我的情况下,我尝试对一个名为createdAt
的字段进行排序,但后来发现我的mongodb字段被映射为createdat
。
queryOptions.SetSort(bson.D{{"createdat", -1}
findOptions := options.Find()
// Sort by `price` field descending
findOptions.SetSort(bson.M{"price": -1})
db.Collection("products").Find(nil, bson.D{}, findOptions)