MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $ макс

MongoDB има $max оператор, който ви позволява да актуализирате стойността на поле само ако посочената стойност е по-голяма от текущата стойност на полето.

С други думи, ако $max стойността е по-голяма от текущата стойност в документа, $max се използва стойност. В противен случай стойността на документа остава непроменена.

Пример

Да предположим, че имаме колекция като тази:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

И си представете, че актуализираме колекцията след всяка тренировка с най-новите повдигания. В този случай бихме искали само bestLift полето да се актуализира, ако последното ни повдигане е по-тежко от предишното ни най-добро повдигане (т.е. текущото тегло, посочено за съответното повдигане).

В този случай бихме могли да използваме $max оператор за постигане на този резултат.

Пример:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 240 } } 
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Това съобщение ни казва, че един документ съответства и е актуализиран.

Нека проверим колекцията отново.

db.workout.find()

Резултат:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Можем да видим, че bestLift полето за първия документ е актуализирано с новата стойност. Това е така, защото 240 е по-висока от предишната му стойност от 230.

Когато стойността е по-ниска

Когато стойността е посочена с $max е по-ниска от съществуващата стойност в документа, нищо не се актуализира.

Пример:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 220 } } 
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

По съобщението виждаме, че нищо не е актуализирано.

Нека проверим колекцията отново.

db.workout.find()

Резултат:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Можем да видим, че стойността остава на 240, въпреки че се опитахме да я актуализираме до 220. Това се очаква, защото използвахме $max .

Дати

Можете да използвате $max на полета за дата.

Да предположим, че имаме collection наречени абонаменти със следния документ:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

Нека се опитаме да актуализираме датата с дата, която е по-ранна от текущата дата в документа.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2020-01-01") } } 
)

Тук се опитваме да актуализираме годината от 2021 до 2020 . Като се има предвид, че новата дата е по-ранна от съществуващата, получаваме следното.

db.subscriptions.find()

Резултат:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }

Както се очакваше, нищо не беше актуализирано.

Нека се опитаме да го актуализираме с по-късна дата.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2022-01-01") } } 
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

По съобщението можем да видим, че документът е актуализиран.

Да проверим.

db.subscriptions.find()

Резултат:

{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }

Датата беше актуализирана според очакванията.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $acos

  2. E11000 дублиран ключов индекс на грешка в mongodb mongoose

  3. MongoDB $push срещу $addToSet:Каква е разликата?

  4. Първи стъпки с MongoDB User Management

  5. MongoDB $pull масив 2 ниво