MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

IAsyncCursor được sử dụng như thế nào để lặp lại với trình điều khiển c # mongodb?

Bạn có 3 lựa chọn:

  1. Sử dụng phương pháp trình điều khiển tích hợp sẵn (ví dụ:ForEachAsync , ToListAsync ).
  2. Trên C # 8.0 trở lên, bạn có thể chuyển đổi IAsyncCursor thành một IAsyncEnumerable và sử dụng await foreach hoặc bất kỳ toán tử LINQ không đồng bộ nào.
  3. Lặp lại IAsyncCursor .
Phương pháp trình điều khiển tích hợp

Trình điều khiển có một số phương thức mở rộng giống LINQ cho IAsyncCursor , như AnyAsync , ToListAsync , v.v. Để lặp lại, nó có ForEachAsync :

var cursor = await client.ListDatabasesAsync();
await cursor.ForEachAsync(db => Console.WriteLine(db["name"]));
Chuyển đổi thành IAsyncEnumerable

Trên C # 8.0 trở lên, nó phải đẹp hơn khi lặp lại với await foreach (và sử dụng LINQ không đồng bộ). Điều này yêu cầu gói IAsyncCursor trong một IAsyncEnumerable .Bạn có thể tự làm nhưng vì điều quan trọng là phải làm đúng một số việc quan trọng (như hủy và xử lý), tôi đã xuất bản một gói nuget: MongoAsyncEnumerableAdapter

var cursor = await client.ListDatabasesAsync();
await foreach (var db in cursor.ToAsyncEnumerable())
{
    Console.WriteLine(db["name"]);
}
Lặp lại tùy chỉnh

Lặp lại truyền thống trong C # được thực hiện với IEnumerableforeach . foreach là cú pháp của trình biên dịch. Nó thực sự là một cuộc gọi đến GetEnumerator , một using phạm vi và một while vòng lặp:

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

IAsyncCursor tương đương với IEnumerator (kết quả của IEnumerable.GetEnumerator ) trong khi IAsyncCursorSourceIEnumerable . Sự khác biệt là những hỗ trợ này async (và nhận được một lô mỗi lần lặp lại chứ không chỉ một mục duy nhất). Vì vậy, bạn có thể triển khai toàn bộ using , while tự lặp lại điều này:

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. Lumen và MongoDB?

  2. Tại sao triển khai java bson sử dụng trường inc 4 byte?

  3. Dữ liệu mùa xuân mongodb xóa một thuộc tính khỏi tài liệu bằng MongoTemplate

  4. Meteor / ReactJS - Sự cố nhấp nháy giao diện người dùng:hiển thị hai lần trước và sau khi kiểm tra cơ sở dữ liệu

  5. Tìm tất cả các tài liệu trùng lặp trong bộ sưu tập MongoDB theo trường khóa