MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

W jaki sposób IAsyncCursor jest używany do iteracji ze sterownikiem c# mongodb?

Masz 3 opcje:

  1. Użyj wbudowanej metody sterownika (np. ForEachAsync , ToListAsync ).
  2. W C# 8.0 i nowszych możesz przekonwertować IAsyncCursor w IAsyncEnumerable i użyj await foreach lub dowolny operator asynchronicznego LINQ.
  3. Iteruj po IAsyncCursor .
Wbudowane metody sterowników

Sterownik ma kilka metod rozszerzenia podobnych do LINQ dla IAsyncCursor , np. AnyAsync , ToListAsync , itp. Dla iteracji ma ForEachAsync :

var cursor = await client.ListDatabasesAsync();
await cursor.ForEachAsync(db => Console.WriteLine(db["name"]));
Konwertowanie na IAsyncEnumerable

W C# 8.0 i nowszych musi ładniej iterować z await foreach (i użyj asynchronicznego LINQ). Wymaga to zapakowania IAsyncCursor w IAsyncEnumerable .Możesz to zrobić sam, ale ponieważ ważne jest, aby niektóre krytyczne rzeczy były prawidłowe (takie jak anulowanie i usuwanie), opublikowałem pakiet nuget:MongoAsyncEnumerableAdapter

var cursor = await client.ListDatabasesAsync();
await foreach (var db in cursor.ToAsyncEnumerable())
{
    Console.WriteLine(db["name"]);
}
Niestandardowa iteracja

Tradycyjna iteracja w C# odbywa się za pomocą IEnumerable i foreach . foreach jest cukierkiem składniowym kompilatora. W rzeczywistości jest to wywołanie GetEnumerator , using zakres i while pętla:

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

IAsyncCursor jest odpowiednikiem IEnumerator (wynik IEnumerable.GetEnumerator ) podczas gdy IAsyncCursorSource jest IEnumerable . Różnica polega na tym, że obsługują one async (i otrzymuj partię w każdej iteracji, a nie tylko pojedynczy element). Możesz więc zaimplementować całe using , while zapętl coś sam:

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. MongoDB C++, Jak dodać wartość ISODate podczas wstawiania

  2. Jak dodać metodę schematu w manguście?

  3. Istnieje sposób na wymuszenie integralności referencyjnej w MongoDB

  4. Agregat MongoDB z PHP - pogrupuj według daty

  5. Wyjście z kodem 8 Przykładowe aplikacje meteorologiczne