MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $min


MongoDB tem um $min operador que permite atualizar o valor de um campo somente se o valor especificado for menor que o valor atual do campo.

Em outras palavras, se o $min valor for menor que o valor atual no documento, o $min valor é usado. Caso contrário, o valor do documento permanece inalterado.

Exemplo


Suponha que tenhamos uma coleção chamada golf com o seguinte documento:
{ "_id" : 1, "strokes" : 70 } 

E imagine que atualizamos o documento após cada jogo de golfe com a pontuação mais recente. Neste caso, queremos apenas os strokes campo a ser atualizado se nossa pontuação mais recente for menor do que a nossa pontuação anterior.

Neste caso, poderíamos usar o $min operador para alcançar esse resultado.

Exemplo:
db.golf.update( 
  { _id: 1 }, 
  { $min: { strokes: 64 } } 
)

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

Esta mensagem nos informa que um documento correspondeu e foi atualizado.

Vamos verificar a coleção novamente.
db.golf.find()

Resultado:
{ "_id" : 1, "strokes" : 64 }

Podemos ver que os strokes campo foi atualizado com o novo valor. Isso ocorre porque 64 é menor que seu valor anterior de 70.

Quando o valor é maior


Quando o valor especificado com $min for maior que o valor existente no documento, nada é atualizado.

Exemplo:
db.golf.update( 
  { _id: 1 }, 
  { $min: { strokes: 72 } } 
)

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

Podemos ver pela mensagem que nada foi atualizado.

Vamos verificar a coleção novamente.
db.golf.find()

Resultado:
{ "_id" : 1, "strokes" : 64 }

Podemos ver que o valor permanece em 64, embora tenhamos tentado atualizá-lo para 72. Isso é esperado, pois usamos $min .

Datas


Você pode usar $min nos campos de data.

Suponha que temos uma collection denominada espécie com o seguinte documento:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } 

Vamos tentar atualizar a data com uma data posterior à data atual no documento.
db.species.update( 
  { _id: 1 }, 
  { $min: { firstDiscovered: new Date("2001-01-01") } } 
)

Aqui, tentamos atualizar o ano de 2000 para 2001 . Dado que a nova data é posterior à existente, obtemos o seguinte:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Nada foi atualizado.

Vamos conferir a coleção:
db.species.find()

Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } 

Como esperado, o mesmo valor de data permanece.

Agora vamos tentar atualizá-lo com uma data anterior.
db.species.update( 
  { _id: 1 }, 
  { $min: { firstDiscovered: new Date("1999-01-01") } } 
)

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

Podemos ver pela mensagem que o documento foi atualizado.

Vamos checar.
db.species.find()

Resultado:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") } 

A data foi atualizada conforme o esperado.