Драйвер Mongodb С#: следует использовать как FindAysnc, так и ToListAsync в том же запросе

63
9

У Mongodb есть FindAsync и Find. Я понимаю, как это потенциально может быть полезно, если вы собираетесь проходить вокруг курсора, но я не совсем понимаю, как это работает с их собственным ToListAsync. Вот два запроса. Является ли лучше, чем другой результат? В частности, с запросами 200-1000 документов.

public async Task<List<MongoUser>> GetUsersAsync(IEnumerable<Guid> userGuids)
{
var filter = Builders<MongoUser>.Filter.In(u => u.Guid, userGuids);
var resultCursor = await Db.GetCollection<MongoUser>("Users").FindAsync(filter);
var users = await resultCursor.ToListAsync();
return users;
}

public async Task<List<MongoUser>> GetUsersAsync2(IEnumerable<Guid> userGuids)
{
var filter = Builders<MongoUser>.Filter.In(u => u.Guid, userGuids);
var users = await Db.GetCollection<MongoUser>("Users").Find(filter).ToListAsync();
return users;
}

Этот вопрос аналогичен для справки

Тем не менее, я не думаю, что ответ ясен в моем вопросе. В комментариях спросил: "Я загружаю ровно один документ в любом случае", и ответ был "Для одного документа Find выглядит лучше, потому что вы не работаете с курсором". Я считаю, что это закончило тему для этого вопроса.

Ответ путается, потому что он говорит, что оба "Find и FindAsync позволяют создавать асинхронный запрос с одинаковой производительностью", а "FindAsync" возвращает курсор, который не загружает сразу все документы и предоставляет вам интерфейс для получения документов один за другим из курсора DB Это полезно, если результат запроса огромен ". Возможно, он также имеет в виду небольшие запросы.

Я надеюсь понять, хорошо ли работает MongoDb с помощью ToListAsync(), не блокируя поток до тех пор, пока не будет выполнена вся команда, или если необходимо использовать FindAsync(), чтобы заставить MongoDb освободить поток, когда он создает запрос или что-то вроде Find().

спросил(а) 2017-09-25T23:20:00+03:00 2 года, 5 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема