sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB (server v 2.6.7) med C#-drivrutin 2.0:Hur man får resultatet från InsertOneAsync

Om du gör detta inom en async metod, då kommer Brducas svar att fungera (och är att föredra), annars kan du ringa Wait() Task returneras från InsertOneAsync ring för att säkerställa att din applikation finns kvar tillräckligt länge för att se undantaget för dubblettnyckeln:

commandsCollection.InsertOneAsync(doc).Wait();

Om insättningen misslyckas på grund av en dubblettnyckel visas Wait() kommer att kasta en AggregateException som innehåller en MongoWriteException som innehåller dubblettnyckeldetaljerna.

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

På samma sätt, om du använder await , som kommer att kasta en AggregateException likaså.

För att undvika den extra komplexiteten hos AggregateException omsluter mongo-undantaget kan du anropa GetAwaiter().GetResult() istället för 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. Fråga och infoga med ett enda kommando

  2. Redis scan count:Hur tvingar man SCAN att returnera alla nycklar som matchar ett mönster?

  3. Så här gör du:Användaren har fans

  4. Custom Cascading in Spring Data MongoDB