У меня есть большая коллекция, которую мне нужно перебрать.Я использую курсор для этого.
Однако я заметил, что иногда получаю повторяющиеся записи из этого курсора.Я немного почитал и обнаружил, что могу решить эту проблему с помощью снимка.
Изоляция курсора Когда курсор возвращает документы, другие операции могут чередоваться с запросом.Для механизма хранения 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;
}