On this page本页内容
$convert
New in version 4.0.在版本4.0中新增。
Converts a value to a specified type.将值转换为指定类型。
$convert
has the following syntax:语法如下:
{ $convert: { input: <expression>, to: <type expression>, onError: <expression>, // Optional. onNull: <expression> // Optional. } }
The $convert
takes a document with the following fields:$convert
接受具有以下字段的文档:
input | ||||||||||||||||||||||||||||
to |
| |||||||||||||||||||||||||||
onError |
| |||||||||||||||||||||||||||
onNull |
|
In addition to 除了$convert
, MongoDB provides the following aggregation operators as shorthand when the default "onError" and "onNull" behavior is acceptable:$convert
之外,MongoDB还提供以下聚合运算符作为默认“onError”和“onNull”行为可接受时的缩写:
The following table lists the input types that can be converted to a boolean:下表列出了可转换为布尔值的输入类型:
Boolean | |
Double | true 。false 。 |
Decimal | true 。false 。 |
Integer | true 。false 。 |
Long | true 。false 。 |
ObjectId | true 。 |
String | true 。 |
Date | true 。 |
Timestamp | true 。 |
The following table lists some conversion to boolean examples:下表列出了一些转换为布尔值的示例:
{ input: true, to: "bool" } | true |
{ input: false, to: "bool" } | false |
{ input: 1.99999, to: "bool" } | true |
{ input: Decimal128( "5" ), to: "bool" } | true |
{ input: Decimal128( "0" ), to: "bool" } | false |
{ input: 100, to: "bool" } | true |
{ input: ISODate( "2018-03-26T04:38:28.044Z" ), to: "bool" } | true |
{ input: "hello", to: "bool" } | true |
{ input: "false", to: "bool" } | true |
{ input: "", to: "bool" } | true |
{ input: null, to: "bool" } | null |
The following table lists the input types that can be converted to an integer:下表列出了可转换为整数的输入类型:
Boolean | 0 for false .0 表示false 。1 for true .1 为true 。 |
Double |
|
Decimal |
|
Integer | |
Long |
|
String |
|
The following table lists some conversion to integer examples:下表列出了一些转换为整数的示例:
{ input: true, to: "int" } | 1 |
{ input: false, to: "int" } | 0 |
{ input: 1.99999, to: "int" } | 1 |
{ input: Decimal128( "5.5000" ), to: "int" } | 5 |
{ input: Decimal128( "9223372036000.000" ), to: "int" } | Error |
{ input: Long( "5000" ), to: "int" } | 5000 |
{ input: Long( "922337203600" ), to: "int" } | Error |
{ input: "-2", to: "int" } | -2 |
{ input: "2.5", to: "int" } | Error |
{ input: null, to: "int" } | null |
$toInt
operator.操作符。
The following table lists the input types that can be converted to a decimal:下表列出了可转换为十进制的输入类型:
Input Type | Behavior |
---|---|
Boolean | Returns
Decimal128( "0" ) for false .Returns
Decimal128( "1" ) for true . |
Double | |
Decimal | |
Integer | |
Long | |
String |
|
Date |
The following table lists some conversion to decimal examples:下表列出了一些转换为十进制的示例:
{ input: true, to: "decimal" } | Decimal128("1") |
{ input: false, to: "decimal" } | Decimal128("0") |
{ input: 2.5, to: "decimal" } | Decimal128( "2.50000000000000" ) |
{ input: Int32( 5 ), to: "decimal" } | Decimal128("5") |
{ input: Long( 10000 ), to: "decimal" } | Decimal128("10000") |
{ input: "-5.5", to: "decimal" } | Decimal128("-5.5") |
{ input: ISODate( "2018-03-26T04:38:28.044Z" ), to: "decimal" } | Decimal128("1522039108044") |
The following table lists the input types that can be converted to a double:下表列出了可转换为双精度的输入类型:
Boolean |
|
Double | |
Decimal |
|
Integer | |
Long | |
String |
|
Date |
The following table lists some conversion to double examples:下表列出了一些到双示例的转换:
{ input: true, to: "double" } | 1 |
{ input: false, to: "double" } | 0 |
{ input: 2.5, to: "double" } | 2.5 |
{ input: Int32( 5 ), to: "double" } | 5 |
{ input: Long( "10000" ), to: "double" } | 10000 |
{ input: "-5.5", to: "double" } | -5.5 |
{ input: "5e10", to: "double" } | 50000000000 |
{ input: ISODate( "2018-03-26T04:38:28.044Z" ), to: "double" } | 1522039108044 |
The following table lists the input types that can be converted to a long:下表列出了可转换为long的输入类型:
Input Type | Behavior |
---|---|
Boolean |
|
Double |
|
Decimal |
|
Integer | |
Long | |
String |
|
Date |
The following table lists some conversion to long examples:下表列出了一些到长示例的转换:
{ input: true, to: "long" } | Long("1") |
{ input: false, to: "long" } | Long("0") |
{ input: 2.5, to: "long" } | Long("2") |
{ input: Decimal128( "5.5000" ), to: "long" } | Long("5") |
{ input: Decimal128( "9223372036854775808.0" ), to: "long" } | Error |
{ input: Int32( 8 ), to: "long" } | Long("8") |
{ input: ISODate( "2018-03-26T04:38:28.044Z" ), to: "long" } | Long("1522039108044") |
{ input: "-2", to: "long" } | Long("-2") |
{ input: "2.5", to: "long" } | Error |
{ input: null, to: "long" } | null |
The following table lists the input types that can be converted to a date:下表列出了可转换为日期的输入类型:
Input Type | Behavior |
---|---|
Double |
|
Decimal |
|
Long |
|
String |
|
ObjectId | |
Timestamp |
The following table lists some conversion to date examples:下表列出了一些迄今为止的转换示例:
{ input: 120000000000.5, to: "date" } | ISODate("1973-10-20T21:20:00.000Z") |
{ input: Decimal128( "1253372036000.50" ), to: "date" } | ISODate("2009-09-19T14:53:56.000Z") |
{ input: Long( "1100000000000" ), to: "date } | ISODate("2004-11-09T11:33:20.000Z") |
{ input: Long( "-1100000000000" ), to: "date" } | ISODate("1935-02-22T12:26:40.000Z") |
{ input: ObjectId( "5ab9c3da31c2ab715d421285" ), to: "date" } | ISODate("2018-03-27T04:08:58.000Z") |
{ input: "2018-03-03", to: "date" } | ISODate("2018-03-03T00:00:00.000Z") |
{ input: "2018-03-20 11:00:06 +0500", to: "date" } | ISODate("2018-03-20T06:00:06.000Z") |
{ input: "Friday", to: "date" } | Error |
{ input: Timestamp( { t: 1637688118, i: 1 } ), to: "date" } | ISODate("2021-11-23T17:21:58.000Z") |
$toDate
$dateFromString
The following table lists the input types that can be converted to an ObjectId:下表列出了可转换为ObjectId的输入类型:
Input Type | Behavior |
---|---|
String |
|
The following table lists some conversion to date examples:下表列出了一些迄今为止的转换示例:
{ input: "5ab9cbfa31c2ab715d42129e", to: "objectId" } | ObjectId("5ab9cbfa31c2ab715d42129e") |
{ input: "5ab9cbfa31c2ab715d42129", to: "objectId" } | Error |
$toObjectId
operator.
The following table lists the input types that can be converted to a string:下表列出了可转换为字符串的输入类型:
Input Type | Behavior |
---|---|
Boolean | |
Double | |
Decimal | |
Integer | |
Long | |
ObjectId | |
String | |
Date |
The following table lists some conversion to string examples:下表列出了一些转换为字符串的示例:
{ input: true, to: "string" } | "true" |
{ input: false, to: "string" } | "false" |
{ input: 2.5, to: "string" } | "2.5" |
{ input: Int32( 2 ), to: "string" } | "2" |
{ input: Long( 1000 ), to: "string" } | "1000" |
{ input: ObjectId( "5ab9c3da31c2ab715d421285" ), to: "string" } | "5ab9c3da31c2ab715d421285" |
{ input: ISODate( "2018-03-27T16:58:51.538Z" ), to: "string" } | "2018-03-27T16:58:51.538Z" |
$toString
$dateToString
Create a collection 使用以下文档创建集合orders
with the following documents:orders
:
db.orders.insertMany( [ { _id: 1, item: "apple", qty: 5, price: 10 }, { _id: 2, item: "pie", qty: 10, price: Decimal128("20.0") }, { _id: 3, item: "ice cream", qty: 2, price: "4.99" }, { _id: 4, item: "almonds" }, { _id: 5, item: "bananas", qty: 5000000000, price: Decimal128("1.25") } ] )
The following aggregation operation on the orders
collection converts the price
to a decimal:orders
集合上的以下聚合操作将price
转换为十进制:
// Define stage to add convertedPrice and convertedQty fields with // the converted price and qty values. // If price or qty values are missing, the conversion returns a // value of decimal value or int value of 0. // If price or qty values cannot be converted, the conversion returns // a string priceQtyConversionStage = { $addFields: { convertedPrice: { $convert: { input: "$price", to: "decimal", onError: "Error", onNull: Decimal128("0") } }, convertedQty: { $convert: { input: "$qty", to: "int", onError:{ $concat: [ "Could not convert ", { $toString:"$qty" }, " to type integer." ] }, onNull: Int32("0") } }, } }; totalPriceCalculationStage = { $project: { totalPrice: { $switch: { branches: [ { case: { $eq: [ { $type: "$convertedPrice" }, "string" ] }, then: "NaN" }, { case: { $eq: [ { $type: "$convertedQty" }, "string" ] }, then: "NaN" }, ], default: { $multiply: [ "$convertedPrice", "$convertedQty" ] } } } } }; db.orders.aggregate( [ priceQtyConversionStage, totalPriceCalculationStage ])
The operation returns the following documents:操作将返回以下文档:
{ _id: 1, totalPrice: Decimal128("50") }, { _id: 2, totalPrice: Decimal128("200.0") }, { _id: 3, totalPrice: Decimal128("9.98") }, { _id: 4, totalPrice: Decimal128("0") }, { _id: 5, totalPrice: 'NaN' }