sql >> Database >  >> NoSQL >> MongoDB

MongoDB $max

MongoDB heeft een $max operator waarmee u de waarde van een veld alleen kunt bijwerken als de opgegeven waarde groter is dan de huidige waarde van het veld.

Met andere woorden, als de $max waarde groter is dan de huidige waarde in het document, de $max waarde wordt gebruikt. Anders blijft de waarde van het document ongewijzigd.

Voorbeeld

Stel dat we een collectie hebben zoals deze:

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

En stel je voor dat we de collectie na elke training bijwerken met de nieuwste liften. In dit geval willen we alleen de bestLift veld dat moet worden bijgewerkt als onze laatste lift zwaarder was dan onze vorige beste lift (d.w.z. het huidige gewicht dat wordt vermeld voor de respectieve lift).

In dit geval zouden we de $max . kunnen gebruiken operator om dat resultaat te bereiken.

Voorbeeld:

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

Uitgang:

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

Dit bericht vertelt ons dat één document overeenkomt en is bijgewerkt.

Laten we de collectie nog eens bekijken.

db.workout.find()

Resultaat:

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

We kunnen zien dat de bestLift veld voor het eerste document is bijgewerkt met de nieuwe waarde. Dit komt omdat 240 hoger is dan de vorige waarde van 230.

Als de waarde lager is

Wanneer de waarde gespecificeerd met $max lager is dan de bestaande waarde in het document, wordt er niets bijgewerkt.

Voorbeeld:

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

Uitgang:

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

We kunnen aan het bericht zien dat er niets is bijgewerkt.

Laten we de collectie nog eens bekijken.

db.workout.find()

Resultaat:

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

We kunnen zien dat de waarde op 240 blijft, ook al hebben we geprobeerd deze bij te werken naar 220. Dit is te verwachten, omdat we $max hebben gebruikt .

Datums

U kunt $max . gebruiken op datumvelden.

Stel we hebben een collection opgeroepen abonnementen met het volgende document:

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

Laten we proberen de datum bij te werken met een datum die eerder is dan de huidige datum in het document.

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

Hier proberen we het jaar bij te werken vanaf 2021 tot 2020 . Aangezien de nieuwe datum eerder is dan de bestaande, krijgen we het volgende.

db.subscriptions.find()

Resultaat:

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

Zoals verwacht is er niets bijgewerkt.

Laten we proberen het op een later tijdstip bij te werken.

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

Uitgang:

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

We kunnen aan het bericht zien dat het document is bijgewerkt.

Laten we eens kijken.

db.subscriptions.find()

Resultaat:

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

De datum is bijgewerkt zoals verwacht.


  1. Hoe vertel je Mongo een verzameling te sorteren voordat de resultaten worden beperkt?

  2. Hoe HBase in CDP de S3 van Amazon kan benutten

  3. Hoe kan ik door live MongoDB-gegevens bladeren of deze opvragen?

  4. MongoDB opgeslagen procedure-equivalent