MongoDB má $min
operátor, který umožňuje aktualizovat hodnotu pole pouze v případě, že je zadaná hodnota menší než aktuální hodnota pole.
Jinými slovy, pokud $min
hodnota je menší než aktuální hodnota v dokumentu, $min
je použita hodnota. Jinak zůstane hodnota dokumentu nezměněna.
Příklad
Předpokládejme, že máme kolekci nazvanou golf
s následujícím dokumentem:
{ "_id" : 1, "strokes" : 70 }
A představte si, že dokument aktualizujeme po každém golfu o nejnovější skóre. V tomto případě bychom chtěli pouze strokes
pole, které bude aktualizováno, pokud bude naše poslední skóre nižší než naše předchozí skóre.
V tomto případě bychom mohli použít $min
operátora k dosažení tohoto výsledku.
Příklad:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Tato zpráva nám říká, že jeden dokument se shodoval a byl aktualizován.
Podívejme se znovu na sbírku.
db.golf.find()
Výsledek:
{ "_id" : 1, "strokes" : 64 }
Vidíme, že strokes
pole bylo aktualizováno novou hodnotou. Je to proto, že 64 je nižší než jeho předchozí hodnota 70.
Když je hodnota vyšší
Když je hodnota zadaná pomocí $min
je vyšší než stávající hodnota v dokumentu, nic se neaktualizuje.
Příklad:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Podle zprávy vidíme, že nebylo nic aktualizováno.
Podívejme se znovu na sbírku.
db.golf.find()
Výsledek:
{ "_id" : 1, "strokes" : 64 }
Vidíme, že hodnota zůstává na 64, i když jsme se ji pokusili aktualizovat na 72. To se očekává, protože jsme použili $min
.
Data
Můžete použít $min
v datech.
Předpokládejme, že máme collection
nazvaný druh s následujícím dokumentem:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Zkusme aktualizovat datum datem, které je pozdější než aktuální datum v dokumentu.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Zde se snažíme aktualizovat rok z 2000
do 2001
. Vzhledem k tomu, že nové datum je pozdější než stávající, dostáváme následující:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Nic nebylo aktualizováno.
Podívejme se na sbírku:
db.species.find()
Výsledek:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Podle očekávání zůstává stejná hodnota data.
Nyní jej zkusme aktualizovat na dřívější datum.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Podle zprávy vidíme, že dokument byl aktualizován.
Zkontrolujeme.
db.species.find()
Výsledek:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
Datum bylo aktualizováno podle očekávání.