MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как се използва IAsyncCursor за итерация с драйвера mongodb c#?

Имате 3 възможности:

  1. Използвайте метода на вградения драйвер (напр. ForEachAsync , ToListAsync ).
  2. На C# 8.0 и по-нови можете да конвертирате IAsyncCursor в IAsyncEnumerable и използвайте await foreach или всеки асинхронен LINQ оператор.
  3. Повтаряне на IAsyncCursor .
Вградени методи на драйвер

Драйверът има някои подобни на LINQ методи за разширение за IAsyncCursor , като AnyAsync , ToListAsync и т.н. За итерация има ForEachAsync :

var cursor = await client.ListDatabasesAsync();
await cursor.ForEachAsync(db => Console.WriteLine(db["name"]));
Конвертиране в IAsyncEnumerable

На C# 8.0 и по-нови трябва да е по-приятно да се повтаря с await foreach (и използвайте асинхронен LINQ). Това изисква обвиване на IAsyncCursor в IAsyncEnumerable .Можете да го направите сами, но тъй като е важно някои критични неща да бъдат правилни (като анулиране и изхвърляне), публикувах пакет nuget:MongoAsyncEnumerableAdapter

var cursor = await client.ListDatabasesAsync();
await foreach (var db in cursor.ToAsyncEnumerable())
{
    Console.WriteLine(db["name"]);
}
Персонализирана итерация

Традиционната итерация в C# се извършва с IEnumerable и foreach . foreach е синтактичната захар на компилатора. Това всъщност е извикване на GetEnumerator , a using обхват и while цикъл:

using (var enumerator = enumerable.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        var current = enumerator.Current;
        // use current.
    }
}

IAsyncCursor е еквивалентен на IEnumerator (резултатът от IEnumerable.GetEnumerator ), докато IAsyncCursorSource е към IEnumerable . Разликата е, че те поддържат async (и получавайте партида за всяка итерация, а не само един елемент). Така че можете да приложите целия using , while завъртете нещо сами:

IAsyncCursorSource<int> cursorSource = null;

using (var asyncCursor = await cursorSource.ToCursorAsync())
{
    while (await asyncCursor.MoveNextAsync())
    {
        foreach (var current in asyncCursor.Current)
        {
            // use current
        }
    }
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обяснение на датата в JSON

  2. Mongodb:неуспешно свързване със сървъра при първото свързване

  3. конвертиране от blob в двоичен файл, за да го запишете в mongodb

  4. mongoDB upsert върху масив

  5. MongoDB Java драйвер, създаващ база данни и колекция