MongoDB har en $min
operator som låter dig uppdatera värdet på ett fält endast om det angivna värdet är mindre än det aktuella värdet för fältet.
Med andra ord, om $min
värdet är mindre än det aktuella värdet i dokumentet, $min
värde används. Annars förblir dokumentets värde oförändrat.
Exempel
Anta att vi har en samling som heter golf
med följande dokument:
{ "_id" : 1, "strokes" : 70 }
Och föreställ dig att vi uppdaterar dokumentet efter varje golfomgång med den senaste poängen. I det här fallet vill vi bara ha strokes
fältet som ska uppdateras om vårt senaste resultat var lägre än vår tidigare poäng.
I det här fallet kan vi använda $min
operatör för att uppnå detta resultat.
Exempel:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Detta meddelande berättar att ett dokument matchade och uppdaterades.
Låt oss kolla in samlingen igen.
db.golf.find()
Resultat:
{ "_id" : 1, "strokes" : 64 }
Vi kan se att strokes
fältet uppdaterades med det nya värdet. Detta beror på att 64 är lägre än dess tidigare värde på 70.
När värdet är högre
När värdet anges med $min
är högre än det befintliga värdet i dokumentet uppdateras ingenting.
Exempel:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Vi kan se på meddelandet att ingenting har uppdaterats.
Låt oss kolla in samlingen igen.
db.golf.find()
Resultat:
{ "_id" : 1, "strokes" : 64 }
Vi kan se att värdet ligger kvar på 64, även om vi försökte uppdatera det till 72. Detta förväntas eftersom vi använde $min
.
Datum
Du kan använda $min
på datumfält.
Anta att vi har en collection
kallas art med följande dokument:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Låt oss försöka uppdatera datumet med ett datum som är senare än det aktuella datumet i dokumentet.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Här försöker vi uppdatera årtalet från 2000
till 2001
. Med tanke på att det nya datumet är senare än det befintliga får vi följande:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Ingenting uppdaterades.
Låt oss kolla samlingen:
db.species.find()
Resultat:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Som förväntat finns samma datumvärde kvar.
Låt oss nu försöka uppdatera den med ett tidigare datum.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vi kan se på meddelandet att dokumentet har uppdaterats.
Låt oss kolla.
db.species.find()
Resultat:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
Datumet uppdaterades som förväntat.