$mul
定義
$mul
フィールドの値に数値を掛けます。
$mul
式を指定するには、次のプロトタイプを使用します。{ $mul: { <field1>: <number1>, ... } } 更新するフィールドには数値が含まれている必要があります。
埋め込みドキュメントまたは配列で
<field>
を指定するには、 ドット表記 を使用します。
動作
MongoDB 5.0 以降、$mul
などの更新演算子を空のオペランド式({ }
)と併用しても、mongod
でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
欠落しているフィールド
フィールドがドキュメントに存在しない場合、$mul
はフィールドを作成し、乗数と同じ数値型の値を 0 に設定します。
アトミック
$mul
は、1 つのドキュメント内のアトミック操作です。
混合型
混合数値型(32 ビット整数、64 ビット整数、浮動小数点数)の値の乗算では、数値型の変換が発生する可能性があります。混合数値型の値の乗算では、次の型変換規則が適用されます。
32ビット整数 | 64 ビット整数 | Float | |
---|---|---|---|
32ビット整数 | 32 ビットまたは 64 ビット整数 | 64 ビット整数 | Float |
64 ビット整数 | 64 ビット整数 | 64 ビット整数 | Float |
Float | Float | Float | Float |
注意
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" : NumberLong(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 型です。詳細については、乗算型変換規則を参照してください。