MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडब सी # ड्राइवर के साथ पुनरावृत्ति के लिए IAsyncCursor का उपयोग कैसे किया जाता है?

आपके पास 3 विकल्प हैं:

  1. अंतर्निहित ड्राइवर विधि का उपयोग करें (उदा. ForEachAsync , ToListAsync )।
  2. C# 8.0 और इसके बाद के संस्करण पर आप IAsyncCursor . को रूपांतरित कर सकते हैं एक IAsyncEnumerable . में और await foreach . का उपयोग करें या कोई एसिंक्स LINQ ऑपरेटर।
  3. IAsyncCursor पर पुनरावृति करें ।
अंतर्निहित चालक तरीके

ड्राइवर के पास IAsyncCursor . के लिए LINQ जैसी कुछ एक्सटेंशन विधियां हैं , जैसे AnyAsync , ToListAsync , आदि। पुनरावृत्ति के लिए इसमें ForEachAsync . है :

var cursor = await client.ListDatabasesAsync();
await foreach (var db in cursor.ToAsyncEnumerable())
{
    Console.WriteLine(db["name"]);
}
IAsyncEnumerable में कनवर्ट किया जा रहा है

C# 8.0 और इसके बाद के संस्करण पर await foreach . के साथ पुनरावृति करना बेहतर होगा (और async 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 के लिए एक कॉल है , एक 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. MongoDB- अगर यह मौजूद नहीं है तो डालें, अन्यथा छोड़ें

  2. सूचियों की सूची में वस्तुओं की गणना कैसे करें

  3. मुझे अपने play2 एप्लिकेशन में अपने नेस्टेड रिएक्टिवमोंगो कॉल की संरचना कैसे करनी चाहिए?

  4. गोलांग में मोंगो क्वेरी का बीएसओएन फॉर्म कैसे लिखें?

  5. mongodb में $ लुकअप के बाद $ प्रोजेक्ट रिटर्न नेस्ट ऐरे का उपयोग कैसे करें?