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