- Scala Driver
- Builders
- Updates
Updates
The Updates
class provides static factory methods for all 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.
For brevity, you may choose to import the methods of the Updates
class statically:
import org.mongodb.scala.model.Updates._
All the examples below assume this static import.
Field Updates
This section describes update operators that apply to the value of an entire field.
Set
The $set
update operator sets the value of a field to to the specified value.
This example sets the value of the quantity
field to 11
:
set("quantity", 11)
Unset
The $unset
update operator deletes the field with the given name.
This example deletes the quantity
field:
unset("quantity")
Set On Insert
The $setOnInsert
update operator sets the value of a field to the given
value, but only if the update is an
upsert that results in an
insert of a document.
This example sets the value of the defaultQuantity
field to 10
if an upsert resulted in the insert of a document:
setOnInsert("defaultQuantity", 10)
Increment
The $inc
update operator increments the value of a numeric field by a specified
value.
This example increments the value of the quantity
field by 5
:
inc("quantity", 5)
Multiply
The $mul
update operator multiplies the value of a numeric field by a specified value.
This example multiplies the value of the price
field by 1.2
:
mul("price", 1.2)
Rename
The $rename
update operator renames a field.
This example renames the qty
field to quantity
:
rename("qty", "quantity")
Min
The $min
update operator updates the value of the field to a specified value if the
specified value is less than the current value of the field .
This example sets the value of the lowScore
field to the minimum of its current value and 150:
min("lowScore", 150)
Max
The $max
update operator updates the value of the field to a specified value if
the specified value is greater than the current value of the field .
This example sets the value of the highScore
field to the maximum of its current value and 900:
max("highScore", 900)
Current Date
The $currentDate
update operator sets the value of the field with the
specified name to the current date, either as a BSON date or as a BSON
timestamp.
This example sets the value of the lastModified
field to the current date as a BSON date type:
currentDate("lastModified")
This example sets the value of the lastModified
field to the current date as a BSON timestamp type:
currentTimestamp("lastModified")
Bit
The $bit
update operator performs a bitwise update of the integral value of a field.
This example performs a bitwise AND between the number 10
and the integral value of the mask
field:
bitwiseAnd("mask", 10)
This example performs a bitwise OR between the number 10
and the integral value of the mask
field:
bitwiseOr("mask", 10)
This example performs a bitwise XOR between the number 10
and the integral value of the mask
field:
bitwiseXor("mask", 10)
Array Updates
This section describes update operators that apply to the contents of the array value of a field.
Add to Set
The $addToSet
update operator adds a value to an array unless the value is
already present, in which case $addToSet does nothing to that array.
This example adds the value "a"
to the array value of the `letters’ field:
addToSet("letters", "a")
This example adds each of the values "a"
, "b"
, and "c"
to the array value of the `letters’ field:
addEachToSet("letters", Arrays.asList("a", "b", "c"))
Pop
The $pop
update operator removes the first or last element of an array.
This example pops the first element off of the array value of the scores
field:
popFirst("scores")
This example pops the last element off of the array value of the scores
field:
popLast("scores")
Pull All
The $pullAll
update operator removes all instances of the specified values from
an existing array.
This example removes the scores 0
and 5
from the scores
array:
pullAll("scores", Arrays.asList(0, 5))
Pull
The $pull
update operator removes from an existing array all instances of a value
or values that match a specified query.
This example removes the value 0
from the scores
array:
pull("scores", 0)
This example removes all elements from the votes
array that are greater than or equal to 6
:
pullByFilter(Filters.gte("votes", 6))
Push
The $push
update operator appends a specified value to an array.
This examples pushes the value 89
to the scores
array:
push("scores", 89)
This examples pushes each of the values 89
, 90
, and 92
to the scores
array:
pushEach("scores", 89, 90, 92)
This example pushes each of the values 89
, 90
, and 92
to the start of the scores
array:
pushEach("scores", new PushOptions().position(0), 89, 90, 92)
This example pushes each of the values 89
, 90
, and 92
to the scores
array, sorts the array in descending order, and removes all
but the first 5 elements of the array:
pushEach("scores", new PushOptions().sort(-1).slice(5), 89, 90, 92)
This example pushes each of the documents { wk: 5, score: 8 }
, { wk: 6, score: 7 }
, and { wk: 7, score: 6 }
to the quizzes
array,
sorts the array in descending order by score
, and removes all but the last 3 elements of the 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))
Combining Multiple Update Operators
Often, an application will need to atomically update multiple fields of a single document by combine two or more of the update operators described above.
This example sets the value of the quantity
field to 11, the value of the total
field to 30.40
, and pushes each of the values
4.99
, 5.99
, and 10.99
to the array value of the prices
field:
combine(set("quantity", 11),
set("total", 30.40),
pushEach("prices", 4.99, 5.99, 10.99))