Как «отсортировать» и «ограничить» результаты в mongodb? - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь выполнить запрос с помощью «sort» и «limit». С mgo вы можете сделать Find(nil).Sort(“-when”).Limit(10), но у нового, официального драйвера mongo нет таких методов. Как я могу отсортировать и «ограничить» новый драйвер?

Ответы [ 5 ]

0 голосов
/ 10 июня 2019

вам нужен импортный пакет "github.com/mongodb/mongo-go-driver/options", чтобы создать findOptions.

import github.com/mongodb/mongo-go-driver/options

findOptions := options.Find() // build a `findOptions`
findOptions.SetSort(map[string]int{"when": -1}) // reverse order by `when`
findOptions.SetSkip(0) // skip whatever you want, like `offset` clause in mysql
findOptions.SetLimit(10) // like `limit` clause in mysql

// apply findOptions
cur, err := collection.Find(context.TODO(), bson.D{}, findOptions)
// resolve err

for cur.Next(context.TODO()) {
   // call cur.Decode()
}

0 голосов
/ 03 июня 2019

Вы можете использовать

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

0 голосов
/ 12 ноября 2018

Опция сортировки, очевидно, требует, чтобы вы добавили map[string]interface{}, где вы можете указать поле в качестве ключа и sortOrder в качестве значения (где 1 означает возрастание, а -1 означает убывание) следующим образом:

sortMap := make(map[string]interface{})
sortMap["version"] = 1
opt := findopt.Sort(sortMap)

Насколько я понимаю, это означает, что вы можете правильно отсортировать результаты только по одному sortField, поскольку ключи в карте перехода хранятся в случайном порядке.

0 голосов
/ 23 ноября 2018

В текущей версии mongo-go-driver v1.0.3 опции упрощены. Например, чтобы выполнить поиск, сортировку и ограничение:

import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

options := options.Find()

// Sort by `_id` field descending
options.SetSort(bson.D{{"_id", -1}})

// Limit by 10 documents only 
options.SetLimit(10)

cursor, err := collection.Find(context.Background(), bson.D{}, options)

См. Больше доступных опций на godoc.org / go.mongodb.org / mongo-driver / mongo / options . Особенно FindOptions для всех возможных вариантов Find().

0 голосов
/ 05 июля 2018

Официальный драйвер не так прост, как mgo. Вы можете сделать сортировку и ограничение, используя findopt.Limit и findopt.Sort.

Вы можете увидеть примеры из официального репозитория.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...