2017-03-29 2 views
0

Wir versuchen, ein mongodb Dokument mit C# Treiber zu aktualisieren, die mehr als 150 Eigenschaften ReplaceOneAsync hat mit und fand es 90ms nimmt das Gleiche zu tun, hier ist der Beispielcode-Schnipsel für das gleiche:MongoDB aktualisieren Leistung

collection.ReplaceOneAsync(n => n.key.Equals(key), value, new UpdateOptions { IsUpsert = false }); 

Könnten Sie uns bitte wissen lassen, ob es einen effizienten Weg gibt, dies zu tun? Unser SLA ist 30ms und unsere Anwendung ist Multi-Threading.

+0

Ist der Schlüssel indiziert? – SJFJ

+0

Haben Sie die [mongodb explain-Funktionalität] (https://docs.mongodb.com/manual/reference/explain-results/) verwendet, um genau zu sehen, wie die Abfrage verarbeitet wird? –

+0

Ja, wir haben @SJFJ indiziert. –

Antwort

0

Ich stimme Maksims Kommentar zu.

Abhängig von der Gesamtzahl der Felder im Dokument und der Anzahl der Felder, die Sie tatsächlich aktualisieren möchten, sollten Sie ein Update verwenden, anstatt zu ersetzen. Die Syntax für einen solchen Vorgang könnte etwa so aussehen:

var update = Builders<MyMongoDbType>.Update 
    .Set(x => x.Name, "Some name") 
    .Set(x => x.EmailAddress, "some email") 
    .CurrentDate(x => x.DateLastUpdated); 

var result = await MyCollection.UpdateOneAsync(x => x.key == "someKey", update);