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.
次のコードに示すように、 Updates
クラスのメソッドを静的にインポートできます。
import org.mongodb.scala.model.Updates._
このガイドの例では、この静的インポートを前提としています。
フィールドの更新
このセクションでは、フィールド全体の値に適用される更新演算子について説明します。
セット
$set
更新演算子は、フィールドの値を指定された値に設定します。
次の例では、 quantity
フィールドの値を11
に設定します。
set("quantity", 11)
設定解除
$unset
更新演算子は、指定された名前のフィールドを削除します。
次の例では、 quantity
フィールドを削除しています。
unset("quantity")
挿入時に設定
$setOnInsert
更新演算子は、フィールドの値を指定された値に設定します。ただし、アップデートがアップサートで、ドキュメントが挿入される場合のみです。
次の例では、アップサートによってドキュメントが挿入された場合に、 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 date 型の現在の日付に設定します。
currentDate("lastModified")
次の例では、 lastModified
フィールドの値を BSON タイムスタンプ 型の現在の日付に設定します。
currentTimestamp("lastModified")
ビット
$bit
更新演算子は、フィールドの整数値のビット単位の更新を実行します。
次の例では、数値10
とマスク フィールドの整数値の間でビット単位のAND
を実行します。
bitwiseAnd("mask", 10)
次の例では、数値10
とマスク フィールドの整数値の間でビット単位のOR
を実行します。
bitwiseOr("mask", 10)
次の例では、数値10
とマスク フィールドの整数値の間でビット単位のXOR
を実行します。
bitwiseXor("mask", 10)
Array Updates
このセクションでは、フィールドの配列値の内容に適用される更新演算子について説明します。
セットに追加
$addToSet
更新演算子は、配列に値が存在しない場合に値を追加します。すでに値が存在する場合、 演算子はその配列に対して何も行いません。
次の例では、 letters
フィールドの配列値に値"a"
を追加します。
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 }
をクイズ配列にプッシュし、配列をスコアの降順でソートして、配列の最後の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))
複数の更新演算子の組み合わせ
多くの場合、アプリケーションは、前のセクションで説明された更新演算子を 2 つ以上組み合わせて、1 つのドキュメントの複数のフィールドをアトミックに更新する必要があります。
次の例では、 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))