MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB (serwer v 2.6.7) ze sterownikiem C# 2.0:Jak uzyskać wynik z InsertOneAsync

Jeśli robisz to w ramach async metoda, wtedy odpowiedź Brduca zadziała (i jest preferowana), w przeciwnym razie możesz zadzwonić Wait() w Task zwrócone z InsertOneAsync wywołaj, aby upewnić się, że aplikacja działa wystarczająco długo, aby zobaczyć wyjątek zduplikowanego klucza:

commandsCollection.InsertOneAsync(doc).Wait();

Jeśli wstawienie nie powiedzie się z powodu zduplikowanego klucza, Wait() zrzuci AggregateException który zawiera MongoWriteException który zawiera zduplikowane szczegóły klucza.

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;
    });
}

Podobnie, jeśli używasz await , który zwróci AggregateException również.

Aby uniknąć dodatkowej złożoności AggregateException zawijając wyjątek mongo, możesz wywołać GetAwaiter().GetResult() zamiast 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo sortuj według pola dynamicznego

  2. Jak w mongoDb usunąć element tablicy według jego indeksu?

  3. Jak napisać aplikację w Pythonie obsługującą wiele baz danych

  4. MongoDB $toDouble

  5. Mongodb:Wykonaj zapytanie o zakres dat z ObjectId w powłoce mongo