MongoDB a un $min
opérateur qui permet de mettre à jour la valeur d'un champ uniquement si la valeur spécifiée est inférieure à la valeur actuelle du champ.
En d'autres termes, si le $min
la valeur est inférieure à la valeur actuelle dans le document, le $min
valeur est utilisée. Sinon, la valeur du document reste inchangée.
Exemple
Supposons que nous ayons une collection appelée golf
avec le document suivant :
{ "_id" : 1, "strokes" : 70 }
Et imaginez que nous mettions à jour le document après chaque partie de golf avec le dernier score. Dans ce cas, nous ne voudrions que les strokes
champ à mettre à jour si notre dernier score était inférieur que notre score précédent.
Dans ce cas, nous pourrions utiliser le $min
opérateur pour atteindre ce résultat.
Exemple :
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
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.golf.find()
Résultat :
{ "_id" : 1, "strokes" : 64 }
Nous pouvons voir que les strokes
le champ a été mis à jour avec la nouvelle valeur. En effet, 64 est inférieur à sa valeur précédente de 70.
Lorsque la valeur est supérieure
Lorsque la valeur spécifiée avec $min
est supérieure à la valeur existante dans le document, rien n'est mis à jour.
Exemple :
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
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.golf.find()
Résultat :
{ "_id" : 1, "strokes" : 64 }
Nous pouvons voir que la valeur reste à 64, même si nous avons essayé de la mettre à jour à 72. C'est normal, car nous avons utilisé $min
.
Dates
Vous pouvez utiliser $min
sur les champs de date.
Supposons que nous ayons une collection
appelée espèce avec le document suivant :
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Essayons de mettre à jour la date avec une date postérieure à la date actuelle dans le document.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Ici, nous essayons de mettre à jour l'année à partir de 2000
à 2001
. Étant donné que la nouvelle date est postérieure à celle existante, nous obtenons ce qui suit :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Rien n'a été mis à jour.
Vérifions la collection :
db.species.find()
Résultat :
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Comme prévu, la même valeur de date reste.
Essayons maintenant de le mettre à jour avec une date antérieure.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-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.species.find()
Résultat :
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
La date a été mise à jour comme prévu.