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

MongoDB $ inc


MongoDB tem um $inc operador de atualização de campo que permite incrementar um valor por um valor específico.

Você pode usar valores positivos e negativos (ou seja, para aumentar ou diminuir o valor).

Se o campo ainda não existir, ele será criado com o valor especificado.

Exemplo


Suponha que tenhamos uma coleção chamada dogs com o seguinte documento:
{ "_id" : 1, "name" : "Wag", "weight" : 10 }

Aqui, o weight O campo contém um valor que pode ser incrementado ou decrementado.

Incremento


Podemos usar o $inc operador em conjunto com o update() método para aumentar o peso deste cão.

Assim:
db.dogs.update(
  { _id: 1 },
  { $inc: { weight: 5 } }
)

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

Isso nos diz que um documento foi correspondido e modificado.

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

Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 15 }

Podemos ver que o peso do cão aumentou em 5.

Diminuir


Você pode diminuir o valor fornecendo um valor negativo ao $inc operador.

Assim:
db.dogs.update(
  { _id: 1 },
  { $inc: { weight: -5 } }
)

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

Confira a coleção:
db.dogs.find()

Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 10 }

Podemos ver que o peso agora foi decrementado em 5.

Incrementar um campo que não existe


Quando você incrementa um campo que não existe no documento, o campo é adicionado e atribuído ao valor especificado.

Exemplo:
db.dogs.update(
  { _id: 1 },
  { $inc: { weight: 1, height: 30 } }
)

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

Observe que atualizamos dois campos; o weight campo e a height campo (que não existia originalmente).

Vamos verificar o documento novamente:
db.dogs.find()

Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }

Podemos ver que o weight campo foi incrementado em 1 , e uma nova height campo foi adicionado com o valor especificado de 30 .