我正在尝试使用“ sort”和“ limit”执行查询。使用mgo可以执行Find(nil).Sort(“-when”).Limit(10)
,但是new, official mongo driver没有这种方法。如何使用新驱动程序进行排序和“限制”?
答案 0 :(得分:4)
官方驱动程序并不像mgo
那样简单。您可以使用findopt.Limit
和findopt.Sort
进行排序和限制。
您可以从官方存储库中查看示例。
答案 1 :(得分:3)
排序选项显然要求您添加一个map[string]interface{}
,您可以在其中指定一个字段作为键,并指定一个sortOrder作为值(其中1表示升序,-1表示降序),如下所示:
sortMap := make(map[string]interface{})
sortMap["version"] = 1
opt := findopt.Sort(sortMap)
据我所知,这意味着您只能按一个sortField对结果进行正确排序,因为go映射中的键是以随机顺序存储的。
答案 2 :(得分:3)
在当前版本mongo-go-driver v0.0.18中,选项已简化。例如,执行查找,排序和限制:
import (
"github.com/mongodb/mongo-go-driver/bson"
"github.com/mongodb/mongo-go-driver/mongo"
"github.com/mongodb/mongo-go-driver/options"
)
options := options.FindOptions{}
// Sort by `_id` field descending
options.Sort = bson.D{{"_id", -1}}
// Limit by 100 documents only
limit := int64(100)
options.Limit = &limit
cursor, err := collection.Find(context.Background(), bson.D{}, &options)
答案 3 :(得分:1)
您可以使用
findOptions := options.Find()
findOptions.SetLimit(2)
findOptions.SetSkip(2)
...
cursor, err := collection.Find(context.Background(), bson.M{}, findOptions)
https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial上的资源
答案 4 :(得分:0)
您需要导入“ github.com/mongodb/mongo-go-driver/options”包以构建Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean)
If SaveAsUI Then
MsgBox "Make sure you are on correct sheet"
End If
End Sub
。
findOptions
答案 5 :(得分:0)
单行选项
我知道已经有很多答案了,但是您可以将其作为一行(如果您的任何情况都需要)
// From the Doc
// func (f *FindOptions) SetSort(sort interface{}) *FindOptions
cursor, err := collection.Find(context.Background(), bson.M{}, options.Find().SetSort(map[string]int{"when": -1}).SetLimit(10))
SetSort()和其他当前返回父指针本身