2015-09-17 7 views
7

Si sta verificando un comportamento strano utilizzando il driver C# per MongoDB. Sto tentando di eseguire un aggiornamento che sostituisce più campi, quindi sto utilizzando il metodo ReplaceOneAsync() dall'API. Le mie connessioni a qualsiasi raccolta vengono effettuate con WriteConcern.Acknowledged in modo da poter gestire i casi in cui il database non viene aggiornato per qualsiasi motivo (come in questa situazione).Corrispondenza filtro del metodo ReplaceOne Corrisponde al documento, non esegue la sostituzione

A volte il database non aggiorna un record, ma non è possibile determinare perché. Quando si tenta di eseguire il debug di questo caso sto guardando l'oggetto ReplaceOneResult restituito dal metodo ReplaceOneAsync e dimostra che MatchedCount = 1, ma il ModifiedCount = 0 come si vede nello screenshot qui sotto dal mio debugger:

Debugging Screenshot

Com'è possibile? Se corrisponde all'ID che sto cercando di sostituire, perché non dovrebbe eseguire la modifica? Significa che si sta verificando una sorta di stato di errore che causa un errore silenzioso? Non genera eccezioni, quindi se questo è il caso, come posso determinare cosa sta andando male?

Ecco il semplice metodo di aggiornamento:

public virtual async Task<bool> Update(T entity) 
{ 
    if (entity.Id == ObjectId.Empty) 
     throw new ArgumentException("Id must be available and in the database to perform an update."); 

    ReplaceOneResult result = await this.MongoConnectionHandler.MongoCollection.ReplaceOneAsync(e => e.Id == entity.Id, entity); 
    return result.ModifiedCount > 0; 
} 
+0

Ho ottenuto il conteggio modificato ma non è stato sostituito. Ancora nessuno ha risposta. Hai trovato qualche soluzione? –

+0

@KalpeshChheda Non ho mai trovato una soluzione a questo o determinato cosa stava succedendo dietro le quinte. L'applicazione su cui stavo lavorando in cui l'ho sperimentato, in realtà ha smesso di usare mongodb del tutto, quindi non mi sono mai preso la briga di continuare a cercare questo problema una volta che è stato ammortizzato. – JNYRanger

risposta

1

Se il MatchedCount = 1 e ModifiedCount = 0 dovrebbe essere perché il vostro documento sostitutivo è identico al documento esistente.

Quindi corrispondevano, ma non era necessaria alcuna sostituzione perché erano identici.

Problemi correlati