$toInt(聚合)
定义
行为
下表列出了可转换为整数的输入类型:
输入类型 | 行为 |
---|---|
布尔 | Returns 0 for false .Returns 1 for true . |
double | 返回截断后的值。 截断后的 double 值必须介于整数的最小值与最大值之间。 如果 double 值的截断值小于最小整数值或大于最大整数值,则无法转换该 double 值。 |
Decimal 数据类型 | 返回截断后的值。 截断后的十进制值必须介于整数的最小值与最大值之间。 如果十进制数值的截断值小于最小整数值或大于最大整数值,则无法转换该十进制数值。 |
整型 | 不操作。返回整数值。 |
Long | 以整数形式返回该长整型值。 该长整型值必须介于整数的最小值与最大值范围之间。 不能转换小于最小整数值或大于最大整数值的长整数值。 |
字符串 | 以整数形式返回字符串的数值。 字符串值必须是以 10 为基数的整数;例如 您无法转换浮点数、十进制数或非以 10 为基数的字符串值(例如 |
下表列出了转换为整数的部分示例:
例子 | 结果 |
---|---|
$toInt: true | 1 |
$toInt: false | 0 |
$toInt: 1.99999 | 1 |
$toInt: NumberDecimal("5.5000") | 5 |
$toInt: NumberDecimal("9223372036000.000") | 错误 |
$toInt: NumberLong("5000") | 5000 |
$toInt: NumberLong("922337203600") | 错误 |
$toInt: "-2" | -2 |
$toInt: "2.5" | 错误 |
$toInt: null | null |
例子
使用以下文档创建集合 orders
:
db.orders.insertMany( [ { _id: 1, item: "apple", qty: "5", price: 10 }, { _id: 2, item: "pie", qty: "10", price: NumberDecimal("20.0") }, { _id: 3, item: "ice cream", qty: "2", price: "4.99" }, { _id: 4, item: "almonds" , qty: "5", price: 5 } ] )
以下聚合操作:
将
qty
转换为整数,将
price
转换为十进制,计算总价格:
// Define stage to add convertedPrice and convertedQty fields with the converted price and qty values priceQtyConversionStage = { $addFields: { convertedPrice: { $toDecimal: "$price" }, convertedQty: { $toInt: "$qty" }, } }; // Define stage to calculate total price by multiplying convertedPrice and convertedQty fields totalPriceCalculationStage = { $project: { item: 1, totalPrice: { $multiply: [ "$convertedPrice", "$convertedQty" ] } } }; db.orders.aggregate( [ priceQtyConversionStage, totalPriceCalculationStage ] )
该操作将返回以下文档:
{ _id: 1, item: 'apple', totalPrice: Decimal128("50") }, { _id: 2, item: 'pie', totalPrice: Decimal128("200.0") }, { _id: 3, item: 'ice cream', totalPrice: Decimal128("9.98") }, { _id: 4, item: 'almonds', totalPrice: Decimal128("25") }
注意
如果转换操作遇到错误,聚合操作会停止并抛出错误。要覆盖此行为,请改为使用 $convert
。