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

C#MongoDBドライバーはタイムアウトオプションを無視します

    JIRAチケットCSHARP-1018 があります この問題を追跡します。基本的に、マシンにアクセスできない場合、ドライバーはタイムアウトオプションを無視します。タイムアウトオプションは、マシンの電源がオフになっているか、アクセスできない場合は無視されます。

    この問題の進捗状況を確認するには、JIRAチケットを参照してください。

    CSHARP-1231 に投稿された回避策を参照してください 特定の操作でより短いタイムアウトを使用するアプローチを好む場合は、ServerSelectionTimeoutを現在の2.0.0バージョンのドライバーで設定できるようにします。

    新しい2.0非同期APIを使用している場合は、キャンセルトークンを使用して、操作全体に独自のタイムアウトを適用できます。

    したがって、前のコメントのキャンセルトークンアプローチをお勧めします。短いサーバー選択タイムアウトを使用すると、サーバー選択タイムアウトが選択の完了にかかる時間よりも短い場合、レプリカセットの選択中に誤った例外が発生する可能性があります。

    次のように書くことができます:

    var startTime = DateTime.UtcNow;
    try
    {
        using (var timeoutCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(500)))
        {
            await collection.Find("{ _id : 1 }").ToListAsync(timeoutCancellationTokenSource.Token);
        }
    }
    catch (OperationCanceledException ex)
    {
        var endTime = DateTime.UtcNow;
        var elapsed = endTime - startTime;
        Console.WriteLine("Operation was cancelled after {0} seconds.", elapsed.TotalSeconds);
    }
    

    この例では、ServerSelectionTimeout はデフォルト値の30秒のままですが、この特定の操作はわずか500ミリ秒後にキャンセルされます(約、キャンセルに少し時間がかかる場合があります)。



    1. 外部フィールドが配列の場合のMongoDBルックアップ

    2. コレクション内のすべてのドキュメントをカウントし、MongoDBとExpress.jsを使用してコントローラーでcontを使用するにはどうすればよいですか?

    3. サブドキュメントフィールドとmongodbの合計金額をカウントします

    4. RリストをJSONに変換する