MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $max

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.