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$dateFromStringThe 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$dateToStringCreate 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' }