2015-09-17 2 views
7

Ich habe merkwürdiges Verhalten mit dem C# -Treiber für MongoDB. Ich versuche, ein Update durchzuführen, das mehrere Felder ersetzt, daher verwende ich die Methode ReplaceOneAsync() aus der API. Meine Verbindungen zu einer beliebigen Sammlung werden mit WriteConcern.Acknowledged hergestellt, sodass ich Fälle behandeln kann, in denen die Datenbank aus irgendeinem Grund nicht aktualisiert wird (wie in dieser Situation).Der Filter der ReplaceOne-Methode entspricht dem Dokument, führt keinen Ersatz durch

Manchmal aktualisiert die Datenbank einen Datensatz nicht, aber ich kann warum nicht feststellen. Bei dem Versuch, diesen Fall zu debuggen ich am ReplaceOneResult interessiere mich von der Methode ReplaceOneAsync zurückgegeben und es zeigt, dass MatchedCount = 1, aber die ModifiedCount = 0, wie von meinem Debugger in der Abbildung unten zu sehen:

Debugging Screenshot

Wie ist das möglich? Wenn es mit der einen ID übereinstimmt, die ich ersetzen möchte, warum führt sie dann nicht die Änderung durch? Bedeutet dies, dass ein Fehlerzustand auftritt, der zu einem stummen Fehler führt? Es gibt keine Ausnahmen. Wenn dies der Fall ist, wie kann ich feststellen, was falsch läuft?

Hier ist die einfache Update-Methode:

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

Ich bekomme geändert, aber immer noch nicht ersetzt. Noch hat niemand Antwort. Haben Sie eine Lösung gefunden? –

+0

@KalpeshCheda Ich habe nie eine Lösung gefunden oder festgestellt, was hinter den Kulissen vor sich ging. Die Anwendung, an der ich gerade arbeitete, hörte tatsächlich auf, mongodb zu verwenden, so dass ich mich nie mehr damit beschäftigte, dieses Problem weiter zu erforschen, sobald es abgeschrieben war. – JNYRanger

Antwort

1

Wenn die MatchedCount = 1 und ModifiedCount = 0 sollte es sein, weil Ihr Ersatzdokument an das bestehende Dokument identisch ist.

Also sie übereinstimmten, aber kein Ersatz war notwendig, weil sie identisch waren.

Verwandte Themen