文档菜单
文档首页
/ / /
Scala
/

更新

在本页

  • 字段更新
  • 设置
  • 取消设置
  • 插入时设置
  • 增加
  • 乘以
  • 重命名
  • 最小值
  • 最大值
  • 当前日期
  • 数组更新
  • 添加到集合
  • 弹出
  • 全部提取
  • 提取
  • 推入
  • 组合多个更新运算符

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 数组中删除分数 05

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)

以下示例将值 899092 推送到 scores 数组中。

pushEach("scores", 89, 90, 92)

以下示例将值 899092 推送到 scores 数组的开头。

pushEach("scores", new PushOptions().position(0), 89, 90, 92)

以下示例将值 899092 推送到 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.995.9910.99 推送到 prices 字段的数组值中。

combine(set("quantity", 11),
set("total", 30.40),
pushEach("prices", 4.99, 5.99, 10.99))

返回

聚合