MongoDB hat einen $max
Operator, mit dem Sie den Wert eines Felds nur dann aktualisieren können, wenn der angegebene Wert größer als der aktuelle Wert des Felds ist.
Mit anderen Worten, wenn $max
value ist größer als der aktuelle Wert im Dokument, der $max
Wert verwendet wird. Andernfalls bleibt der Wert des Dokuments unverändert.
Beispiel
Angenommen, wir haben eine Sammlung wie diese:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
Und stellen Sie sich vor, dass wir die Sammlung nach jedem Training mit unseren neuesten Übungen aktualisieren. In diesem Fall möchten wir nur den bestLift
zu aktualisierendes Feld, wenn unser letztes Heben schwerer war als unser vorheriges bestes Heben (d. h. das aktuelle Gewicht, das für das jeweilige Heben aufgeführt ist).
In diesem Fall könnten wir den $max
verwenden Operator, um dieses Ergebnis zu erzielen.
Beispiel:
db.workout.update(
{ _id: 1 },
{ $max: { bestLift: 240 } }
)
Ausgabe:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Diese Nachricht teilt uns mit, dass ein Dokument übereinstimmte und aktualisiert wurde.
Sehen wir uns die Sammlung noch einmal an.
db.workout.find()
Ergebnis:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
Wir können sehen, dass der bestLift
Feld für das erste Dokument wurde mit dem neuen Wert aktualisiert. Dies liegt daran, dass 240 höher ist als der vorherige Wert von 230.
Wenn der Wert niedriger ist
Wenn der mit $max
angegebene Wert niedriger als der vorhandene Wert im Dokument ist, wird nichts aktualisiert.
Beispiel:
db.workout.update(
{ _id: 1 },
{ $max: { bestLift: 220 } }
)
Ausgabe:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Wir können an der Meldung erkennen, dass nichts aktualisiert wurde.
Sehen wir uns die Sammlung noch einmal an.
db.workout.find()
Ergebnis:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
Wir können sehen, dass der Wert bei 240 bleibt, obwohl wir versucht haben, ihn auf 220 zu aktualisieren. Dies ist zu erwarten, da wir $max
verwendet haben .
Termine
Sie können $max
verwenden auf Datumsfelder.
Angenommen, wir haben eine collection
genannte Abonnements mit folgendem Dokument:
{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }
Versuchen wir, das Datum mit einem Datum zu aktualisieren, das vor dem aktuellen Datum im Dokument liegt.
db.subscriptions.update(
{ _id: 1 },
{ $max: { expiry: new Date("2020-01-01") } }
)
Hier versuchen wir, das Jahr von 2021
zu aktualisieren bis 2020
. Da das neue Datum vor dem bestehenden liegt, erhalten wir Folgendes.
db.subscriptions.find()
Ergebnis:
{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }
Wie erwartet wurde nichts aktualisiert.
Versuchen wir, es zu einem späteren Zeitpunkt zu aktualisieren.
db.subscriptions.update(
{ _id: 1 },
{ $max: { expiry: new Date("2022-01-01") } }
)
Ausgabe:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
An der Meldung können wir erkennen, dass das Dokument aktualisiert wurde.
Lassen Sie uns überprüfen.
db.subscriptions.find()
Ergebnis:
{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }
Das Datum wurde wie erwartet aktualisiert.