$toDate (aggregation)
On this page本页内容
Definition定义
- $toDate
- 
Converts a value to a date.将值转换为日期。If the value cannot be converted to a date,如果无法将值转换为日期,则$toDateerrors. If the value is null or missing,$toDatereturns null.$toDate将出错。如果该值为null或缺失,$toDate将返回null。$toDatehas the following syntax:具有以下语法:{
 $toDate: <expression>
 }The$toDatetakes any valid expression.$toDate采用任何有效的表达式。The$toDateis a shorthand for the following$convertexpression:$toDate是以下$convert表达式的简写:{ $convert: { input: <expression>, to: "date" } }TipSee also:另请参阅:
Behavior行为
The following table lists the input types that can be converted to a date:下表列出了可以转换为日期的输入类型:
| Double | |
| Decimal | |
| Long | |
| String | 
 | 
| ObjectId | |
| Timestamp | 
The following table lists some conversion to date examples:下表列出了一些转换到日期的示例:
| {$toDate: 120000000000.5} | ISODate("1973-10-20T21:20:00Z") | 
| {$toDate: NumberDecimal("1253372036000.50")} | ISODate("2009-09-19T14:53:56Z") | 
| {$toDate: NumberLong("1100000000000")} | ISODate("2004-11-19T11:33:20Z") | 
| {$toDate:  NumberLong("-1100000000000")} | ISODate("1935-02-22T12:26:40Z") | 
| {$toDate: ObjectId("5ab9c3da31c2ab715d421285")} | ISODate("2018-03-27T04:08:58Z") | 
| {$toDate:  "2018-03-20"} | ISODate("2018-03-20T00:00:00Z") | 
| {$toDate: "2018-03-20 11:00:06 +0500"} | ISODate("2018-03-20T06:00:06Z") | 
| {$toDate: "Friday"} | Error | 
| {$toDate: Timestamp({ t: 1637688118, i: 1 })} | ISODate("2021-11-23T17:21:58.00Z") | 
Example实例
Create a collection 使用以下文档创建集合orders with the following documents:orders:
db.orders.insertMany( [
{ _id: 1, item: "apple", qty: 5, price: 2, order_date: new Date( "2018-03-20" ) },
{ _id: 2, item: "pie", qty: 10, price: 3, order_date: new Date( "2018-03-22" ) },
{ _id: 3, item: "ice cream", qty: 2, price: 4, order_date: "2018-03-15" },
{ _id: 4, item: "almonds" , qty: 5, price: 7, order_date: "2018-03-15 +10:00" }
] )
The following aggregation operation on the orders collection converts the order_date to date before sorting by the date value:orders集合上的以下聚合操作将order_date转换为日期,然后再按日期值排序:
// Define stage to add convertedDate field with the converted order_date value
dateConversionStage = {
$addFields: {
convertedDate: { $toDate: "$order_date" }
}
};
// Define stage to sort documents by the converted date
sortStage = {
$sort: { "convertedDate": 1 }
};
db.orders.aggregate( [
dateConversionStage,
sortStage
] )
The operation returns the following documents:该操作返回以下文档:
{
   _id: 4,
   item: 'almonds',
   qty: 5,
   price: 7,
   order_date: '2018-03-15 +10:00',
   convertedDate: ISODate("2018-03-14T14:00:00.000Z")
},
{
   _id: 3,
   item: 'ice cream',
   qty: 2,
   price: 4,
   order_date: '2018-03-15',
   convertedDate: ISODate("2018-03-15T00:00:00.000Z")
},
{
   _id: 1,
   item: 'apple',
   qty: 5,
   price: 2,
   order_date: ISODate("2018-03-20T00:00:00.000Z"),
   convertedDate: ISODate("2018-03-20T00:00:00.000Z")
},
{
   _id: 2,
   item: 'pie',
   qty: 10,
   price: 3,
   order_date: ISODate("2018-03-22T00:00:00.000Z"),
   convertedDate: ISODate("2018-03-22T00:00:00.000Z")
}