MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $maks.

MongoDB ma $max operator, który pozwala zaktualizować wartość pola tylko wtedy, gdy określona wartość jest większa niż bieżąca wartość pola.

Innymi słowy, jeśli $max wartość jest większa niż bieżąca wartość w dokumencie, $max używana jest wartość. W przeciwnym razie wartość dokumentu pozostaje niezmieniona.

Przykład

Załóżmy, że mamy taką kolekcję:

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

I wyobraź sobie, że aktualizujemy kolekcję po każdym treningu bez najnowszych wyciągów. W tym przypadku chcielibyśmy tylko bestLift pole do zaktualizowania, jeśli nasz ostatni dźwig był cięższy niż nasz poprzedni najlepszy dźwig (tj. aktualna waga podana dla odpowiedniego dźwigu).

W tym przypadku możemy użyć $max operatora, aby osiągnąć ten wynik.

Przykład:

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

Wyjście:

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

Ta wiadomość informuje nas, że jeden dokument pasował i został zaktualizowany.

Sprawdźmy ponownie kolekcję.

db.workout.find()

Wynik:

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

Widzimy, że bestLift pole dla pierwszego dokumentu zostało zaktualizowane o nową wartość. Dzieje się tak, ponieważ 240 jest wyższa niż poprzednia wartość 230.

Gdy wartość jest niższa

Gdy wartość określona w $max jest niższa niż istniejąca wartość w dokumencie, nic nie jest aktualizowane.

Przykład:

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

Wyjście:

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

Widzimy komunikat, że nic nie zostało zaktualizowane.

Sprawdźmy ponownie kolekcję.

db.workout.find()

Wynik:

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

Widzimy, że wartość pozostaje na 240, mimo że próbowaliśmy zaktualizować ją do 220. Jest to oczekiwane, ponieważ użyliśmy $max .

Daty

Możesz użyć $max w polach daty.

Załóżmy, że mamy collection zwane subskrypcjami z następującym dokumentem:

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

Spróbujmy zaktualizować datę o datę, która jest wcześniejsza niż bieżąca data w dokumencie.

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

Tutaj staramy się zaktualizować rok od 2021 do 2020 . Biorąc pod uwagę, że nowa data jest wcześniejsza niż istniejąca, otrzymujemy następujące.

db.subscriptions.find()

Wynik:

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

Zgodnie z oczekiwaniami nic nie zostało zaktualizowane.

Spróbujmy zaktualizować go z późniejszą datą.

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

Wyjście:

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

Widzimy komunikat, że dokument został zaktualizowany.

Sprawdźmy.

db.subscriptions.find()

Wynik:

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

Data została zaktualizowana zgodnie z oczekiwaniami.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Odległość wydruku MongoDB między dwoma punktami

  2. 5 sposobów na wstawianie dokumentów do MongoDB

  3. Mongo $w wydajności operatora

  4. MongoDb:Korzyści z używania ObjectID w porównaniu z ciągiem zawierającym identyfikator?

  5. Oblicz wartość pominięcia dla danego rekordu dla posortowanego stronicowania