更新
这Updates类提供了用于MongoDB更新运算符的静态工厂方法。每个方法返回一个Bson
类型的实例,该实例可以进一步传递给任何期望更新参数的方法。
您可以通过以下代码以静态方式导入Updates
类的所有方法
import org.mongodb.scala.model.Updates._
本指南中的示例假设此静态导入。
字段更新
本节描述应用于整个字段值的更新运算符。
集合
$set
更新运算符将字段的值设置为指定的值。
以下示例将 quantity
字段的值设置为 11
set("quantity", 11)
未设置
$unset
更新运算符删除具有给定名称的字段。
以下示例删除了 quantity
字段
unset("quantity")
插入时设置
$setOnInsert
更新运算符将字段的值设置为给定的值,但仅当更新是一个upsert操作并导致文档插入时。
以下示例如果upsert操作导致文档插入,则将 defaultQuantity
字段的值设置为 10
setOnInsert("defaultQuantity", 10)
递增
$inc
更新运算符通过指定值递增数值字段的值。
以下示例将 quantity
字段的值递增 5
inc("quantity", 5)
乘以
更新运算符 $mul
将数值字段的值乘以指定的值。
以下示例将 price
字段的值乘以 1.2
。
mul("price", 1.2)
重命名
更新运算符 $rename
用于重命名字段。
以下示例将 qty
字段重命名为 quantity
。
rename("qty", "quantity")
最小
更新运算符 $min
如果指定的值小于字段的当前值,则将字段的值更新为指定的值。
以下示例将 lowScore
字段的值设置为当前值和 150
之间的最小值。
min("lowScore", 150)
最大值
$max
更新操作符将字段的值更新为指定值,如果指定值大于字段当前值。
以下示例将 highScore
字段的值设置为当前值和 900
中的最大值
max("highScore", 900)
当前日期
$currentDate
更新操作符将指定名称的字段值设置为当前日期,无论是作为 BSON 日期还是作为 BSON 时间戳。
以下示例将 lastModified
字段的值设置为 BSON 日期类型的当前日期
currentDate("lastModified")
以下示例将 lastModified
字段的值设置为 BSON 时间戳类型的当前日期
currentTimestamp("lastModified")
位
$bit
更新操作符执行字段的整数值的位更新。
以下示例在数字 10
和掩码字段的整数值之间执行位 AND
操作
bitwiseAnd("mask", 10)
以下示例在数字 10
和掩码字段的整数值之间执行位 OR
操作
bitwiseOr("mask", 10)
以下示例在数字 10
和掩码字段的整数值之间执行位 XOR
操作
bitwiseXor("mask", 10)
数组更新
本节描述应用于字段数组值的更新运算符。
添加到集合
$addToSet
更新运算符会将值添加到数组中,除非该值已存在,在这种情况下,运算符不会对该数组执行任何操作。
以下示例将值 "a"
添加到 letters
字段的数组值中
addToSet("letters", "a")
以下示例将值 "a"
、"b"
和 "c"
分别添加到 letters
字段的数组值中
addEachToSet("letters", Arrays.asList("a", "b", "c"))
弹出
$pop
更新运算符用于从数组中删除第一个或最后一个元素。
以下示例从 scores
字段的数组值中删除第一个元素
popFirst("scores")
以下示例从 scores
字段的数组值中删除最后一个元素
popLast("scores")
全部拉取
更新操作符 $pullAll
从现有数组中删除指定的值的所有实例。
以下示例从 scores
数组中删除分数 0
和 5
pullAll("scores", Arrays.asList(0, 5))
拉取
更新操作符 $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))