sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $max

MongoDB har en $max operator, der kun tillader dig at opdatere værdien af ​​et felt, hvis den angivne værdi er større end den aktuelle værdi af feltet.

Med andre ord, hvis $max værdien er større end den aktuelle værdi i dokumentet, $max værdi bruges. Ellers forbliver dokumentets værdi uændret.

Eksempel

Antag, at vi har en samling som denne:

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

Og forestil dig, at vi opdaterer kollektionen efter hver træning uden de seneste løft. I dette tilfælde vil vi kun have bestLift felt, der skal opdateres, hvis vores seneste løft var tungere end vores tidligere bedste løft (dvs. den aktuelle vægt angivet for det respektive løft).

I dette tilfælde kunne vi bruge $max operatør for at opnå dette resultat.

Eksempel:

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

Output:

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

Denne meddelelse fortæller os, at et dokument matchede og blev opdateret.

Lad os tjekke samlingen igen.

db.workout.find()

Resultat:

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

Vi kan se, at bestLift felt for det første dokument blev opdateret med den nye værdi. Dette skyldes, at 240 er højere end dens tidligere værdi på 230.

Når værdien er lavere

Når værdien er angivet med $max er lavere end den eksisterende værdi i dokumentet, er intet opdateret.

Eksempel:

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

Output:

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

Vi kan se på beskeden, at intet blev opdateret.

Lad os tjekke samlingen igen.

db.workout.find()

Resultat:

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

Vi kan se, at værdien forbliver på 240, selvom vi forsøgte at opdatere den til 220. Dette forventes, fordi vi brugte $max .

Datoer

Du kan bruge $max på datofelter.

Antag, at vi har en collection kaldede abonnementer med følgende dokument:

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

Lad os prøve at opdatere datoen med en dato, der er tidligere end den aktuelle dato i dokumentet.

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

Her forsøger vi at opdatere året fra 2021 til 2020 . Da den nye dato er tidligere end den eksisterende, får vi følgende.

db.subscriptions.find()

Resultat:

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

Som forventet blev intet opdateret.

Lad os prøve at opdatere det med en senere dato.

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

Output:

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

Vi kan se på meddelelsen, at dokumentet blev opdateret.

Lad os tjekke.

db.subscriptions.find()

Resultat:

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

Datoen blev opdateret som forventet.


  1. MongoDB udtrækker værdier fra BasicDBObject (Java)

  2. Azure Redis Cache - Flere fejl TimeoutException:Timeout udfører GET {key}

  3. Python &Redis:Bedste praksis for Manager/Worker-applikationer

  4. Sådan bruger du Redis fra Node.js