MongoDB има $min оператор, който ви позволява да актуализирате стойността на поле само ако посочената стойност е по-малка от текущата стойност на полето.
С други думи, ако $min стойността е по-малка от текущата стойност в документа, $min се използва стойност. В противен случай стойността на документа остава непроменена.
Пример
Да предположим, че имаме колекция, наречена golf със следния документ:
{ "_id" : 1, "strokes" : 70 }
И си представете, че актуализираме документа след всяка игра на голф с най-новия резултат. В този случай бихме искали само strokes поле за актуализиране, ако последният ни резултат е бил по-нисък от предишния ни резултат.
В този случай бихме могли да използваме $min оператор за постигане на този резултат.
Пример:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
) Изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) Това съобщение ни казва, че един документ съответства и е актуализиран.
Нека проверим колекцията отново.
db.golf.find() Резултат:
{ "_id" : 1, "strokes" : 64 }
Можем да видим, че strokes полето е актуализирано с новата стойност. Това е така, защото 64 е по-ниска от предишната му стойност от 70.
Когато стойността е по-висока
Когато стойността е посочена с $min е по-висока от съществуващата стойност в документа, нищо не се актуализира.
Пример:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
) Изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) По съобщението виждаме, че нищо не е актуализирано.
Нека проверим колекцията отново.
db.golf.find() Резултат:
{ "_id" : 1, "strokes" : 64 }
Можем да видим, че стойността остава на 64, въпреки че се опитахме да я актуализираме до 72. Това се очаква, защото използвахме $min .
Дати
Можете да използвате $min на полета за дата.
Да предположим, че имаме collection наричани видове със следния документ:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } Нека се опитаме да актуализираме датата с дата, която е по-късна от текущата дата в документа.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Тук се опитваме да актуализираме годината от 2000 до 2001 . Като се има предвид, че новата дата е по-късна от съществуващата, получаваме следното:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) Нищо не е актуализирано.
Нека проверим колекцията:
db.species.find() Резултат:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } Както се очакваше, остава същата стойност на датата.
Сега нека се опитаме да го актуализираме с по-ранна дата.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
) Изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) По съобщението можем да видим, че документът е актуализиран.
Да проверим.
db.species.find() Резултат:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") } Датата беше актуализирана според очакванията.