MongoDB ma $min
operator, który pozwala zaktualizować wartość pola tylko wtedy, gdy określona wartość jest mniejsza niż bieżąca wartość pola.
Innymi słowy, jeśli $min
wartość jest mniejsza niż bieżąca wartość w dokumencie, $min
używana jest wartość. W przeciwnym razie wartość dokumentu pozostaje niezmieniona.
Przykład
Załóżmy, że mamy kolekcję o nazwie golf
z następującym dokumentem:
{ "_id" : 1, "strokes" : 70 }
I wyobraź sobie, że aktualizujemy dokument po każdej grze w golfa o najnowszy wynik. W tym przypadku chcielibyśmy tylko strokes
pole do zaktualizowania, jeśli nasz ostatni wynik był niższy niż nasz poprzedni wynik.
W tym przypadku możemy użyć $min
operatora, aby osiągnąć ten wynik.
Przykład:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
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.golf.find()
Wynik:
{ "_id" : 1, "strokes" : 64 }
Widzimy, że strokes
pole zostało zaktualizowane o nową wartość. Dzieje się tak, ponieważ 64 jest niższe niż poprzednia wartość 70.
Gdy wartość jest wyższa
Gdy wartość określona w $min
jest wyższa niż istniejąca wartość w dokumencie, nic nie jest aktualizowane.
Przykład:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Widzimy komunikat, że nic nie zostało zaktualizowane.
Sprawdźmy ponownie kolekcję.
db.golf.find()
Wynik:
{ "_id" : 1, "strokes" : 64 }
Widzimy, że wartość pozostaje na 64, mimo że próbowaliśmy zaktualizować ją do 72. Jest to oczekiwane, ponieważ użyliśmy $min
.
Daty
Możesz użyć $min
w polach daty.
Załóżmy, że mamy collection
zwanych gatunkami z następującym dokumentem:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Spróbujmy zaktualizować datę o datę późniejszą niż bieżąca data w dokumencie.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Tutaj próbujemy zaktualizować rok od 2000
do 2001
. Biorąc pod uwagę, że nowa data jest późniejsza niż istniejąca, otrzymujemy:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Nic nie zostało zaktualizowane.
Sprawdźmy kolekcję:
db.species.find()
Wynik:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Zgodnie z oczekiwaniami ta sama wartość daty pozostaje.
Teraz spróbujmy zaktualizować go o wcześniejszą datę.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Widzimy komunikat, że dokument został zaktualizowany.
Sprawdźmy.
db.species.find()
Wynik:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
Data została zaktualizowana zgodnie z oczekiwaniami.