MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana IAsyncCursor digunakan untuk iterasi dengan driver mongodb c#?

Anda memiliki 3 opsi:

  1. Gunakan metode driver bawaan (mis. ForEachAsync , ToListAsync ).
  2. Pada C# 8.0 dan di atasnya, Anda dapat mengonversi IAsyncCursor menjadi IAsyncEnumerable dan gunakan await foreach atau operator LINQ asinkron mana pun.
  3. Ulangi IAsyncCursor .
Metode Driver Bawaan

Driver memiliki beberapa metode ekstensi seperti LINQ untuk IAsyncCursor , seperti AnyAsync , ToListAsync , dll. Untuk iterasi ada ForEachAsync :

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

Pada C# 8.0 dan di atasnya harus lebih baik untuk mengulangi dengan await foreach (dan gunakan async LINQ). Ini membutuhkan pembungkusan IAsyncCursor dalam IAsyncEnumerable .Anda dapat melakukannya sendiri tetapi karena penting untuk mendapatkan beberapa hal penting dengan benar (seperti pembatalan dan pembuangan), saya telah menerbitkan paket nuget:MongoAsyncEnumerableAdapter

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

Iterasi tradisional dalam C# dilakukan dengan IEnumerable dan foreach . foreach adalah gula sintaksis kompiler. Ini sebenarnya panggilan ke GetEnumerator , sebuah using lingkup dan while lingkaran:

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

IAsyncCursor setara dengan IEnumerator (hasil dari IEnumerable.GetEnumerator ) saat IAsyncCursorSource adalah untuk IEnumerable . Perbedaannya adalah bahwa ini mendukung async (dan dapatkan batch setiap iterasi dan bukan hanya satu item). Jadi Anda dapat mengimplementasikan seluruh using , while ulangi sendiri:

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. Filter Luwak berdasarkan Kunci Tanggal Dinamis dengan nilai

  2. Perilaku kebutuhan di node.js

  3. Bagaimana cara Menyimpan data bahasa (non bahasa Inggris) yang berbeda di Bidang MongoDB dan mengambil data yang sama?

  4. Bagaimana MongoDB mengimplementasikan indeks spasialnya?

  5. Bagaimana cara mengurutkan sub-dokumen di bidang array?