MongoDB har en $min
operator, der kun tillader dig at opdatere værdien af et felt, hvis den angivne værdi er mindre end den aktuelle værdi af feltet.
Med andre ord, hvis $min
værdien er mindre end den aktuelle værdi i dokumentet, $min
værdi bruges. Ellers forbliver dokumentets værdi uændret.
Eksempel
Antag, at vi har en samling kaldet golf
med følgende dokument:
{ "_id" : 1, "strokes" : 70 }
Og forestil dig, at vi opdaterer dokumentet efter hvert spil golf med den seneste score. I dette tilfælde vil vi kun have strokes
felt, der skal opdateres, hvis vores seneste score var lavere end vores tidligere score.
I dette tilfælde kunne vi bruge $min
operatør for at opnå dette resultat.
Eksempel:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Denne meddelelse fortæller os, at et dokument matchede og blev opdateret.
Lad os tjekke samlingen igen.
db.golf.find()
Resultat:
{ "_id" : 1, "strokes" : 64 }
Vi kan se, at strokes
felt blev opdateret med den nye værdi. Dette skyldes, at 64 er lavere end dens tidligere værdi på 70.
Når værdien er højere
Når værdien er angivet med $min
er højere end den eksisterende værdi i dokumentet, er intet opdateret.
Eksempel:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Vi kan se på beskeden, at intet blev opdateret.
Lad os tjekke samlingen igen.
db.golf.find()
Resultat:
{ "_id" : 1, "strokes" : 64 }
Vi kan se, at værdien forbliver på 64, selvom vi forsøgte at opdatere den til 72. Dette forventes, fordi vi brugte $min
.
Datoer
Du kan bruge $min
på datofelter.
Antag, at vi har en collection
kaldet art med følgende dokument:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Lad os prøve at opdatere datoen med en dato, der er senere end den aktuelle dato i dokumentet.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Her forsøger vi at opdatere året fra 2000
til 2001
. Da den nye dato er senere end den eksisterende, får vi følgende:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Intet blev opdateret.
Lad os tjekke samlingen:
db.species.find()
Resultat:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Som forventet forbliver den samme datoværdi.
Lad os nu prøve at opdatere den med en tidligere dato.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vi kan se på meddelelsen, at dokumentet blev opdateret.
Lad os tjekke.
db.species.find()
Resultat:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
Datoen blev opdateret som forventet.