MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $max

MongoDB a un $max opérateur qui permet de mettre à jour la valeur d'un champ uniquement si la valeur spécifiée est supérieure à la valeur courante du champ.

En d'autres termes, si le $max la valeur est supérieure à la valeur actuelle dans le document, le $max valeur est utilisée. Sinon, la valeur du document reste inchangée.

Exemple

Supposons que nous ayons une collection comme celle-ci :

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Et imaginez que nous mettions à jour la collection après chaque séance d'entraînement avec les derniers ascenseurs. Dans ce cas, nous ne voudrions que le bestLift champ à mettre à jour si notre dernière levée était plus lourde que notre précédente meilleure levée (c'est-à-dire le poids actuel indiqué pour la levée respective).

Dans ce cas, nous pourrions utiliser le $max opérateur pour atteindre ce résultat.

Exemple :

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 240 } } 
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Ce message nous indique qu'un document correspond et a été mis à jour.

Vérifions à nouveau la collection.

db.workout.find()

Résultat :

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Nous pouvons voir que le bestLift champ du premier document a été mis à jour avec la nouvelle valeur. En effet, 240 est supérieur à sa valeur précédente de 230.

Lorsque la valeur est inférieure

Lorsque la valeur spécifiée avec $max est inférieure à la valeur existante dans le document, rien n'est mis à jour.

Exemple :

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 220 } } 
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Nous pouvons voir par le message que rien n'a été mis à jour.

Vérifions à nouveau la collection.

db.workout.find()

Résultat :

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Nous pouvons voir que la valeur reste à 240, même si nous avons essayé de la mettre à jour à 220. C'est normal, car nous avons utilisé $max .

Dates

Vous pouvez utiliser $max sur les champs de date.

Supposons que nous ayons une collection appelés abonnements avec le document suivant :

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

Essayons de mettre à jour la date avec une date antérieure à la date actuelle dans le document.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2020-01-01") } } 
)

Ici, nous essayons de mettre à jour l'année à partir de 2021 à 2020 . Étant donné que la nouvelle date est antérieure à celle existante, nous obtenons ce qui suit.

db.subscriptions.find()

Résultat :

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }

Comme prévu, rien n'a été mis à jour.

Essayons de le mettre à jour avec une date ultérieure.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2022-01-01") } } 
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Nous pouvons voir par le message que le document a été mis à jour.

Vérifions.

db.subscriptions.find()

Résultat :

{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }

La date a été mise à jour comme prévu.