MongoDB ha un $min
operatore che consente di aggiornare il valore di un campo solo se il valore specificato è inferiore al valore corrente del campo.
In altre parole, se il $min
value è inferiore al valore corrente nel documento, il $min
viene utilizzato il valore. In caso contrario, il valore del documento rimane invariato.
Esempio
Supponiamo di avere una collezione chiamata golf
con il seguente documento:
{ "_id" : 1, "strokes" : 70 }
E immagina di aggiornare il documento dopo ogni partita di golf con l'ultimo punteggio. In questo caso, vorremmo solo i strokes
campo da aggiornare se il nostro punteggio più recente era inferiore rispetto al nostro punteggio precedente.
In questo caso potremmo usare il $min
operatore per raggiungere tale risultato.
Esempio:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Questo messaggio ci dice che un documento corrisponde ed è stato aggiornato.
Controlliamo di nuovo la collezione.
db.golf.find()
Risultato:
{ "_id" : 1, "strokes" : 64 }
Possiamo vedere che i strokes
il campo è stato aggiornato con il nuovo valore. Questo perché 64 è inferiore al suo valore precedente di 70.
Quando il valore è più alto
Quando il valore specificato con $min
è maggiore del valore esistente nel documento, nulla viene aggiornato.
Esempio:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Possiamo vedere dal messaggio che non è stato aggiornato nulla.
Controlliamo di nuovo la collezione.
db.golf.find()
Risultato:
{ "_id" : 1, "strokes" : 64 }
Possiamo vedere che il valore rimane a 64, anche se abbiamo provato ad aggiornarlo a 72. Questo è previsto, perché abbiamo usato $min
.
Date
Puoi usare $min
nei campi della data.
Supponiamo di avere una collection
specie chiamata con il seguente documento:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Proviamo ad aggiornare la data con una data successiva alla data corrente nel documento.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Qui, proviamo ad aggiornare l'anno da 2000
a 2001
. Dato che la nuova data è successiva a quella esistente, otteniamo quanto segue:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Nulla è stato aggiornato.
Controlliamo la collezione:
db.species.find()
Risultato:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Come previsto, rimane lo stesso valore di data.
Ora proviamo ad aggiornarlo con una data precedente.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Possiamo vedere dal messaggio che il documento è stato aggiornato.
Controlliamo.
db.species.find()
Risultato:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
La data è stata aggiornata come previsto.