如何在mongodb中“排序”和“限制”结果?

时间:2018-07-04 18:57:47

标签: mongodb go

我正在尝试使用“ sort”和“ limit”执行查询。使用mgo可以执行Find(nil).Sort(“-when”).Limit(10),但是new, official mongo driver没有这种方法。如何使用新驱动程序进行排序和“限制”?

6 个答案:

答案 0 :(得分:4)

官方驱动程序并不像mgo那样简单。您可以使用findopt.Limitfindopt.Sort进行排序和限制。

您可以从官方存储库中查看示例。

https://github.com/mongodb/mongo-go-driver/blob/5fea1444e52844a15513c0d9490327b2bd89ed7c/mongo/crud_spec_test.go#L364

答案 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()和其他当前返回父指针本身