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") }
Датата беше актуализирана според очакванията.