定義
動作
MongoDB5.0 以降、mongod $mulなどの更新演算子を空のオペランド式()と併用しても、{ } でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、 oplogエントリも作成されません(操作は実行されません)。
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
欠落しているフィールド
フィールドがドキュメントに存在しない場合、 はフィールドを作成し、乗数と同じ数値型の値を 0$mul に設定します。
アトミック
$mul は、1 つのドキュメント内のアトミック操作です。
混合型
混在数値型(32ビット整数、64ビット整数、Double、Decimal128)の値の乗算では、数値型の変換が発生する可能性があります。混合数値型の値の乗算では、次の型変換規則が適用されます。
データ型 | 32ビット整数 | 64 ビット整数 | Double | Decimal128 |
|---|---|---|---|---|
32ビット整数 | 32 ビットまたは 64 ビット整数 | 64 ビット整数 | Double | Decimal128 |
64 ビット整数 | 64 ビット整数 | 64 ビット整数 | Double | Decimal128 |
Double | Double | Double | Double | Decimal128 |
Decimal128 | Decimal128 | Decimal128 | Decimal128 | Decimal128 |
注意
2 つの 32 ビット整数の積が 32 ビット整数の最大値を超える場合、結果は 64 ビット整数になります。
64 ビット整数の最大値を超える任意の型の整数演算ではエラーが発生します。
例
フィールドの値を乗算する
products コレクションを次のように作成します。
db.products.insertOne( { "_id" : 1, "item" : "Hats", "price" : Decimal128("10.99"), "quantity" : 25 } )
次の操作では、db.collection.updateOne() はドキュメントをアップデートします。$mul price演算子は、 フィールドに1.25 を乗算し、quantity フィールドに を乗算します。2
db.products.updateOne( { _id: 1 }, { $mul: { price: Decimal128( "1.25" ), quantity: 2 } } )
更新された文書の内容:
priceは元の値 10.99 に 1.25 を掛けた値ですquantityは元の値 25 に 2 を掛けた値です
{ _id: 1, item: 'Hats', price: Decimal128("13.7375"), quantity: 50 }
存在しないフィールドへの $mul 演算子の適用
次のドキュメントを products コレクションに追加します。
db.products.insertOne( { _id: 2, item: "Unknown" } )
次の操作では、 はドキュメントにないフィールドにdb.collection.updateOne() $mul演算子を適用しようとします。
db.products.updateOne( { _id: 2 }, { $mul: { price: Decimal128("100") } } )
db.collection.updateOne() 操作は次を実行します。
priceフィールドを挿入するDecimal128("0") を設定する
{ "_id" : 2, "item" : "Unknown", "price" : Long(0) }
price フィールドの型は乗数と同じ Decimal128 です。
混合数値型の乗算
次のドキュメントを products コレクションに追加します。
db.products.insertOne( { _id: 3, item: "Scarf", price: Decimal128("10") } )
次の操作では、 はdb.collection.updateOne() $mul演算子を使用して、price フィールドのDecimal128 (10 )の値に Int32 (5 )を乗算します。
db.products.updateOne( { _id: 3 }, { $mul: { price: Int32(5) } } )
この操作の結果、次のドキュメントが作成されます。
{ _id: 3, item: 'Scarf', price: Decimal128("50") }
フィールドの値はprice Decimal128 型です。詳細については、 乗算型変換規則 を参照してください。