Updates 类为MongoDB更新操作符提供静态工厂方法。每个方法都返回一个 Bson 类型的实例,而该实例又可以传递给任何需要更新的方法。
您可以静态导入Updates类的方法,如以下代码所示:
import org.mongodb.scala.model.Updates._ 
本指南中的示例假定此静态导入。
字段更新
本节介绍应用于整个字段值的更新操作符。
集
$set更新操作符将字段的值设置为指定值。
以下示例将quantity字段的值设置为11 :
set("quantity", 11) 
未设置
$unset更新操作符删除具有给定名称的字段。
以下示例删除了 quantity 字段:
unset("quantity") 
Set On Insert
$setOnInsert更新操作符会将字段的值设置为给定值,但更新或插入(upsert)是该更新是导致插入文档的更新或插入操作。
如果更新或更新或插入(upsert)导致插入文档,以下示例会将defaultQuantity字段的值设置为10 :
setOnInsert("defaultQuantity", 10) 
增量
$inc更新操作符将数字字段的值按指定值递增。
以下示例将quantity字段的值递增5 :
inc("quantity", 5) 
乘
$mul更新操作符将数值字段的值乘以指定值。
以下示例将price字段的值乘以1.2 :
mul("price", 1.2) 
rename
$rename更新操作符重命名字段。
以下示例将qty字段重命名为quantity :
rename("qty", "quantity") 
Min
如果指定值小于字段的当前值,则$min更新操作符会将字段值更新为指定值。
以下示例将lowScore字段的值设置为其当前值和150中的最小值:
min("lowScore", 150) 
Max
如果指定值大于字段的当前值,则$max更新操作符会将字段值更新为指定值。
以下示例将highScore字段的值设置为其当前值和900中的最大值:
max("highScore", 900) 
当前日期
$currentDate更新操作符将指定名称的字段的值设置为当前日期,可以是BSON日期或BSON时间戳。
以下示例将lastModified字段的值设置为BSON日期类型的当前日期:
currentDate("lastModified") 
以下示例将lastModified字段的值设置为 BSON 时间戳类型的当前日期:
currentTimestamp("lastModified") 
Bit
$bit更新操作符对字段的整数值执行按位更新。
以下示例在数字10和掩码字段的整数值之间执行按位AND :
bitwiseAnd("mask", 10) 
以下示例在数字10和掩码字段的整数值之间执行按位OR :
bitwiseOr("mask", 10) 
以下示例在数字10和掩码字段的整数值之间执行按位XOR :
bitwiseXor("mask", 10) 
Array Updates
本节介绍应用于字段大量值内容的更新操作符。
Add to Set
$addToSet更新操作符会向数组添加一个值,除非该值已经存在,在这种情况下,该操作符不会对该数组执行任何操作。
以下示例将值"a"添加到letters字段的数组值:
addToSet("letters", "a") 
以下示例将值"a" 、 "b"和"c"中的每一个添加到letters字段的数组值中:
addEachToSet("letters", Arrays.asList("a", "b", "c")) 
Pop
$pop更新操作符删除数组的第一个或最后一个元素。
以下示例删除scores字段的数组值的第一个元素:
popFirst("scores") 
以下示例删除scores字段的数组值的最后一个元素:
popLast("scores") 
Pull All
$pullAll更新操作符会从现有大量中删除指定值的所有实例。
以下示例从scores数组中删除分数0和5 :
pullAll("scores", Arrays.asList(0, 5)) 
Pull
$pull更新运算符会从现有数组中删除与指定查询匹配的一个或多个值的所有实例。
以下示例从scores数组中删除0值:
pull("scores", 0) 
以下示例从votes大量中删除所有大于或等于6的元素:
pullByFilter(Filters.gte("votes", 6)) 
推动
$push更新操作符将指定值附加到数组。
以下示例将值89推送到scores大量:
push("scores", 89) 
以下示例将值89 、 90和92推送到scores数组:
pushEach("scores", 89, 90, 92) 
以下示例将值89 、 90和92推送到scores数组的开头:
pushEach("scores", new PushOptions().position(0), 89, 90, 92) 
以下示例将值89 、 90和92推送到scores数组,按降序对数组进行排序,并删除数组中除前5元素之外的所有元素:
pushEach("scores",  new PushOptions().sort(-1).slice(5), 89, 90, 92) 
以下示例将文档{ wk: 5, score: 8 } 、 { wk: 6,
score: 7 }和{ wk: 7, score: 6 }推送到 quizzes 数组,按分数对数组进行降序排序,并删除数组中除最后3元素之外的所有元素:
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)) 
组合多个更新运算符
通常,应用程序必须通过组合前面各节中描述的两个或多个更新操作符来自动更新单个文档的多个字段。
以下示例将quantity字段的值设置为11 ,将total字段的值设置为30.40 ,并将值4.99 、 5.99和10.99推送到数组值prices字段的以下内容:
combine(set("quantity", 11),      set("total", 30.40),      pushEach("prices", 4.99, 5.99, 10.99))