Получать записи партиями из MongoDB, используя golang - PullRequest
0 голосов
/ 09 января 2019

Как можно получать записи партиями из базы данных Монго, используя golang? Я знаю, что у mongoDB есть нечто, называемое cursor.batchSize (), но я пытаюсь найти пример, используя драйвер golang. Из того, что я видел, в библиотеке golang mgo есть функция под названием Batch, но я пытаюсь понять, как нам это сделать.

В идеале я ищу что-то вроде этого:

const cursor = useDb.collection(mycollection).find().batchSize(10000);
for (let doc = await cursor.next(); doc != null; doc = await cursor.next()) {
    if (doc._id % divisor === 0) {
        counter++;
    }
}

Пока у меня есть что-то вроде этого:

err := c.Find(nil).Batch(1).All(&items)

Но это не работает, как ожидалось.

Ссылки: https://docs.mongodb.com/manual/reference/method/cursor.batchSize/ https://godoc.org/github.com/globalsign/mgo#Query.Batch

1 Ответ

0 голосов
/ 10 января 2019

batchSize() указывает количество документов, возвращаемых в каждом пакете ответа. У вас все равно будут все результаты. Например, если общее количество возвращенных документов равно 100, а размер пакета указан как 20, у вас будет 1 find и 4 getMore команды, отправленные с клиента на mongod для выполнения запроса.

Один маленький трюк, который вы можете использовать для проверки. Используйте db.setProfilingLevel(0, 0) из оболочки Монго, чтобы записать все в файл журнала. Запустите ваше тестовое приложение, и вы увидите find и getMore, записанные в журнале.

...