sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB (server v 2.6.7) s C# ovladačem 2.0:Jak získat výsledek z InsertOneAsync

Pokud to děláte v rámci async metoda, pak bude odpověď Brducy fungovat (a je výhodnější), jinak můžete zavolat Wait() na Task vrácené z InsertOneAsync volání, abyste zajistili, že vaše aplikace zůstane dostatečně dlouho, aby se zobrazila výjimka duplicitního klíče:

commandsCollection.InsertOneAsync(doc).Wait();

Pokud se vložení nezdaří kvůli duplicitnímu klíči, Wait() vyvolá AggregateException který obsahuje MongoWriteException který obsahuje podrobnosti o duplicitním klíči.

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

Podobně, pokud používáte await , což vyvolá AggregateException také.

Chcete-li se vyhnout přidané složitosti AggregateException po zabalení mongo výjimky můžete zavolat GetAwaiter().GetResult() místo 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. Odeberte prvek z pole v mongodb

  2. Mongodb a Express

  3. Jaká je nejlepší strategie pro synchronizaci dat Redis do MySQL?

  4. V MongoDB, pokud je index na 3 polích, můžeme tento index použít při dotazu na 2 pole? (zástupný znak ve 3. poli)