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

C#ドライバー2.0を使用するMongoDB(サーバーv 2.6.7):InsertOneAsyncから結果を取得する方法

    async内でこれを行っている場合 メソッドの場合、Brducaの回答は機能します(そして好ましいです)。それ以外の場合は、 Wait() Task InsertOneAsyncから返されます 呼び出して、アプリケーションが重複キーの例外を確認するのに十分な時間留まっていることを確認します。

    commandsCollection.InsertOneAsync(doc).Wait();
    

    キーが重複しているために挿入が失敗した場合は、Wait() AggregateExceptionをスローします MongoWriteExceptionが含まれています 重複するキーの詳細が含まれています。

    try
    {
        commandsCollection.InsertOneAsync(doc).Wait();
    }
    catch(AggregateException aggEx)
    {
        aggEx.Handle(x => 
        { 
            var mwx = x as MongoWriteException;
            if (mwx != null && mwx.WriteError.Category == ServerErrorCategory.DuplicateKey) 
            {
                // mwx.WriteError.Message contains the duplicate key error message
                return true; 
            }
            return false;
        });
    }
    

    同様に、awaitを使用している場合 、AggregateExceptionをスローします 同様に。

    AggregateExceptionの複雑さが増すのを避けるため mongo例外をラップして、GetAwaiter().GetResult()を呼び出すことができます。 Wait()の代わりに :

    try
    {
        commandsCollection.InsertOneAsync(doc).GetAwaiter().GetResult();
    }
    catch(MongoWriteException mwx)
    {
        if (mwx.WriteError.Category == ServerErrorCategory.DuplicateKey) 
        {
            // mwx.WriteError.Message contains the duplicate key error message
        }
    }
    


    1. 特定の日付でのMongoDB/Mongooseクエリ?

    2. カウントするMongoDB集約クエリ

    3. mongodbで複数の列と複数の値でグループ化する方法

    4. MongoDBの特定のドキュメントの配列内の特定の埋め込みドキュメントの値を更新するにはどうすればよいですか?