Снимок курсора MongoDB с драйвером C # - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть большая коллекция, которую мне нужно перебрать.Я использую курсор для этого.

Однако я заметил, что иногда получаю повторяющиеся записи из этого курсора.Я немного почитал и обнаружил, что могу решить эту проблему с помощью снимка.

Изоляция курсора Когда курсор возвращает документы, другие операции могут чередоваться с запросом.Для механизма хранения MMAPv1 промежуточные операции записи в документе могут привести к появлению курсора, который возвращает документ более одного раза, если этот документ изменился.Чтобы справиться с этой ситуацией, см. Информацию о снимке курсора.

Однако я не могу найти этот метод в драйвере C # (версия 2.7).Я не вижу его в FindFluent или FindOptions.

Может кто-нибудь указать мне пример того, как я могу создать снимок курсора с помощью драйвера C # MongoDB?

Вот как выглядит мой код.

    private async Task<int> IterateViaCursor<P>(FilterDefinition<User> filter, ProjectionDefinition<User, P> pdef, Func<IEnumerable<P>, Task> callback, int batchSize)
        where P : class
    {
        var o = new FindOptions { BatchSize = batchSize };
        var count = 0;
        var findFluent = Users.Find(filter, o).Project(pdef);
        using (var cursor = await findFluent.ToCursorAsync())
        {
            while (await cursor.MoveNextAsync())
            {
                var batchCount = cursor.Current.Count();
                count += batchCount;
                if (batchCount > 0)
                    await callback(cursor.Current.ToList());
            }
        }
        return count;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...