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

MongoDB $ min

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.