2015-05-21 7 views
8

Ho un codice C# che utilizza la vecchia versione 1.x del driver MongoDB che offre un metodo di salvataggio generico usando il metodo MongoCollection.Save(). Tuttavia, dopo l'aggiornamento alla 2.0 questo metodo sembra essere andato e sostituito con un metodo di aggiornamento che richiede tutti i campi aggiornati sull'oggetto da specificare (che ovviamente non va bene per un metodo generico ...)Nuova alternativa per il vecchio driver .net MongoCollection.Save?

Come faccio mantenere la funzionalità del vecchio metodo di salvataggio (cioè basta passare un oggetto per aggiornare tutti i campi) nel driver 2.0?

risposta

7

È possibile utilizzare ReplaceOneAsync con la bandiera IsUpsert e una query ID:

public async Task<ReplaceOneResult> Save(Hamster hamster) 
{ 
    var replaceOneResult = await collection.ReplaceOneAsync(
     doc => doc.Id == hamster.Id, 
     hamster, 
     new UpdateOptions {IsUpsert = true}); 
    return replaceOneResult; 
} 

Potete guardare ReplaceOneResult.MatchedCount per vedere se era un inserimento o aggiornamento.