The Updates class provides static factory methods for the MongoDB update operators. Each method returns an instance of the Bson
type, which can in turn be passed to any method that expects an update.
Você pode importar os métodos da classe Updates
estaticamente, como mostrado no seguinte código:
import org.mongodb.scala.model.Updates._
Os exemplos deste guia pressupõem essa importação estática.
Atualizações de campo
Esta seção descreve os operadores de atualização que se aplicam ao valor de um campo inteiro.
definir
O operador de atualização $set
define o valor de um campo para o valor especificado.
O seguinte exemplo define o valor do campo quantity
para 11
:
set("quantity", 11)
Desconfigurar
O operador de atualização $unset
exclui o campo com o nome fornecido.
O exemplo seguinte exclui o campo quantity
:
unset("quantity")
Definir na inserção
O operador de atualização $setOnInsert
define o valor de um campo para o valor fornecido, mas somente se a atualização for um upsert que resulte em uma inserção de um documento.
O exemplo a seguir define o valor do campo defaultQuantity
como 10
se um upsert resultou na inserção de um documento:
setOnInsert("defaultQuantity", 10)
Incremento
O operador de atualização $inc
incrementa o valor de um campo numérico em um valor especificado.
O exemplo seguinte incrementa o valor do campo quantity
por 5
:
inc("quantity", 5)
Multiplicar
O operador de atualização $mul
multiplica o valor de um campo numérico por um valor especificado.
O seguinte exemplo multiplica o valor do campo price
por 1.2
:
mul("price", 1.2)
renomear
O operador de atualização $rename
renomeia um campo.
O exemplo a seguir renomeia o campo qty
para quantity
:
rename("qty", "quantity")
Min
O operador de atualização $min
atualiza o valor do campo para um valor especificado se o valor especificado for menor que o valor atual do campo.
O exemplo a seguir define o valor do campo lowScore
para o mínimo de seu valor atual e 150
:
min("lowScore", 150)
Máx
O operador de atualização $max
atualiza o valor do campo para um valor especificado se o valor especificado for maior que o valor atual do campo.
O exemplo a seguir define o valor do campo highScore
para o máximo de seu valor atual e 900
:
max("highScore", 900)
Data atual
O operador de atualização $currentDate
define o valor do campo com o nome especificado para a data atual, seja como uma data BSON ou como um carimbo de data/hora BSON.
O exemplo a seguir define o valor do campo lastModified
para a data atual como um tipo de data BSON:
currentDate("lastModified")
O exemplo a seguir define o valor do campo lastModified
para a data atual como um tipo de carimbo de data/hora BSON:
currentTimestamp("lastModified")
Bit
O operador de atualização $bit
executa uma atualização bitwise do valor integral de um campo.
O exemplo a seguir executa um AND
bitwise entre o número 10
e o valor integral do campo de máscara:
bitwiseAnd("mask", 10)
O exemplo a seguir executa um OR
bitwise entre o número 10
e o valor integral do campo de máscara:
bitwiseOr("mask", 10)
O exemplo a seguir executa um XOR
bitwise entre o número 10
e o valor integral do campo de máscara:
bitwiseXor("mask", 10)
Array Updates
Esta seção descreve os operadores de atualização que se aplicam ao conteúdo do valor da array de um campo.
Adicionar ao conjunto
O operador de atualização $addToSet
adiciona um valor a uma array, a menos que o valor já esteja presente, caso em que o operador não faz nada com essa array.
O exemplo seguinte adiciona o valor "a"
ao valor da array do campo letters
:
addToSet("letters", "a")
O exemplo a seguir adiciona cada um dos valores "a"
, "b"
e "c"
ao valor da array do campo letters
:
addEachToSet("letters", Arrays.asList("a", "b", "c"))
Pop
O operador de atualização $pop
remove o primeiro ou último elemento de uma array.
O exemplo a seguir remove o primeiro elemento do valor da array do campo scores
:
popFirst("scores")
O exemplo a seguir remove o último elemento do valor da array do campo scores
:
popLast("scores")
Puxe tudo
O operador de atualização $pullAll
remove todas as instâncias dos valores especificados de uma array existente.
O exemplo a seguir remove as pontuações 0
e 5
da array scores
:
pullAll("scores", Arrays.asList(0, 5))
Puxe
O operador de atualização $pull
remove de uma array existente todas as instâncias de um valor ou valores que correspondem a uma query especificada.
O exemplo a seguir remove o valor 0
da array scores
:
pull("scores", 0)
O exemplo a seguir remove todos os elementos da array votes
que são maiores ou iguais a 6
:
pullByFilter(Filters.gte("votes", 6))
Empurrar
O operador de atualização $push
acrescenta um valor especificado a uma array.
O exemplo a seguir empurra o valor 89
para a array scores
:
push("scores", 89)
O exemplo a seguir empurra os valores 89
, 90
e 92
para a array scores
:
pushEach("scores", 89, 90, 92)
O exemplo a seguir empurra os valores 89
, 90
e 92
para o início da array scores
:
pushEach("scores", new PushOptions().position(0), 89, 90, 92)
O exemplo a seguir empurra os valores 89
, 90
e 92
para a array scores
, classifica a array em ordem decrescente e remove todos, exceto os primeiros elementos 5
da array:
pushEach("scores", new PushOptions().sort(-1).slice(5), 89, 90, 92)
O exemplo a seguir empurra os documentos { wk: 5, score: 8 }
, { wk: 6,
score: 7 }
e { wk: 7, score: 6 }
para a array de questionários, classifica a array em ordem decrescente por pontuação e remove todos, exceto os últimos 3
elementos da array:
pushEach("quizzes", new PushOptions().sortDocument(Sorts.descending("score")).slice(-3), Document("week" -> 5, "score" -> 8), Document("week" -> 6, "score" -> 7), Document("week" -> 7, "score" -> 6))
Combinando vários operadores de atualização
Muitas vezes, um aplicação deve atualizar atomicamente vários campos de um único documento combinando dois ou mais operadores de atualização descritos nas seções anteriores.
O exemplo a seguir define o valor do campo quantity
como 11
, o valor do campo total
como 30.40
e empurra os valores 4.99
, 5.99
e 10.99
para o valor da array do campo prices
:
combine(set("quantity", 11), set("total", 30.40), pushEach("prices", 4.99, 5.99, 10.99))