sql >> データベース >  >> NoSQL >> MongoDB

IAsyncCursorは、mongodb c#ドライバーでの反復にどのように使用されますか?

    3つのオプションがあります:

    1. 組み込みのドライバーメソッドを使用します(例:ForEachAsyncToListAsync
    2. C#8.0以降では、IAsyncCursorを変換できます。 IAsyncEnumerableawait foreachを使用します または任意の非同期LINQ演算子。
    3. IAsyncCursorを繰り返し処理します 。
    組み込みのドライバメソッド

    ドライバーには、IAsyncCursor用のLINQのような拡張メソッドがいくつかあります。 、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を使用して行われます。 およびforeachforeach コンパイラの構文糖衣です。これは実際にはGetEnumeratorの呼び出しです 、using スコープとwhile ループ:

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

    IAsyncCursor IEnumeratorと同等です (IEnumerable.GetEnumeratorの結果 )while 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. どのIPアドレスがデータベースに接続されているかを発見する方法はありますか?

    2. BinDataを使用したMongoDumpクエリ

    3. マングースはSQLのようなselectの仮想フィールドをサポートしていますか

    4. Javaを使用したmongodbの自動インクリメントシーケンス