目录
- 语法
- 使用
- 使用例子对规则进行说明
- 格式指示符
- 举例
- 日期转换
- 错误处理onError
- 空值的粗粒 onNull
$dateFromString聚合运算符将日期时间字符串转换为日期对象。
语法
{ $dateFromString: {
dateString: <dateStringExpression>,
format: <formatStringExpression>,
timezone: <tzExpression>,
onError: <onErrorExpression>,
onNull: <onNullExpression>
} }
参数字段说明:
使用
使用例子对规则进行说明
例1:
{ $dateFromString: {
dateString: \”2017-02-08T12:10:40.787\”
} }
结果:ISODate("2017-02-08T12:10:40.787Z")
例2:
{ $dateFromString: {
dateString: \”2017-02-08T12:10:40.787\”,
timezone: \”America/New_York\”
} }
结果:ISODate("2017-02-08T12:10:40.787Z")
例3:
{ $dateFromString: {
dateString: \”2017-02-08\”
} }
结果:ISODate("2017-02-08T00:00:00Z")
例4:
{ $dateFromString: {
dateString: \”oct 20 2020\”
} }
结果:ISODate("2020-10-20T00:00:00.000Z")
例5:
{ $dateFromString: {
dateString: \”06-15-2018\”,
format: \”%m-%d-%Y\”
} }
结果:ISODate("2018-06-15T00:00:00Z")
例6:
{ $dateFromString: {
dateString: \”15-06-2018\”,
format: \”%d-%m-%Y\”
} }
结果:ISODate("2018-06-15T00:00:00Z")
{ $dateFromString: {
dateString: \”WED jan 31 12:05:28 +03:30 1996\”
} }
结果:ISODate("1996-01-31T08:35:28.000Z")
格式指示符
举例
日期转换
集合logmessages包含下面的数据:
{ _id: 1, date: \”2017-02-08T12:10:40.787\”, timezone: \”America/New_York\”, message: \”Step 1: Started\” },
{ _id: 2, date: \”2017-02-08\”, timezone: \”-05:00\”, message: \”Step 1: Ended\” },
{ _id: 3, message: \” Step 1: Ended \” },
{ _id: 4, date: \”2017-02-09\”, timezone: \”Europe/London\”, message: \”Step 2: Started\”},
{ _id: 5, date: \”2017-02-09T03:35:02.055\”, timezone: \”+0530\”, message: \”Step 2: In Progress\”}
下面的聚合使用$dateFromString将日期值转换为日期对象:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: \’$date\’,
timezone: \’America/New_York\’
}
}
}
} ] )
上述汇总返回以下文档,并将每个日期字段转换为东部时区:
{ \”_id\” : 1, \”date\” : ISODate(\”2017-02-08T17:10:40.787Z\”) }
{ \”_id\” : 2, \”date\” : ISODate(\”2017-02-08T05:00:00Z\”) }
{ \”_id\” : 3, \”date\” : null }
{ \”_id\” : 4, \”date\” : ISODate(\”2017-02-09T05:00:00Z\”) }
{ \”_id\” : 5, \”date\” : ISODate(\”2017-02-09T08:35:02.055Z\”) }
也可以通过文档字段提供时区参数,而不是硬编码参数。例如:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: \’$date\’,
timezone: \’$timezone\’
}
}
}
} ] )
上述汇总返回以下文档,并将每个date字段转换为各自的 UTC 表示形式。
{ \”_id\” : 1, \”date\” : ISODate(\”2017-02-08T17:10:40.787Z\”) }
{ \”_id\” : 2, \”date\” : ISODate(\”2017-02-08T05:00:00Z\”) }
{ \”_id\” : 3, \”date\” : null }
{ \”_id\” : 4, \”date\” : ISODate(\”2017-02-09T00:00:00Z\”) }
{ \”_id\” : 5, \”date\” : ISODate(\”2017-02-08T22:05:02.055Z\”) }
错误处理onError
如果文档集中包含不可解析日期字符串的文档,则$dateFromString会出错,除非给参数onError提供一个聚合表达式。
例如,给定一个包含以下文档的日期集合:
{ \”_id\” : 1, \”date\” : \”2017-02-08T12:10:40.787\”, timezone: \”America/New_York\” },
{ \”_id\” : 2, \”date\” : \”20177-02-09T03:35:02.055\”, timezone: \”America/New_York\” }
可以使用onError参数以原始字符串形式返回无效日期:
db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: \’$date\’,
timezone: \’$timezone\’,
onError: \’$date\’
}
}
}
} ] )
返回的文档如下:
{ \”_id\” : 1, \”date\” : ISODate(\”2017-02-08T17:10:40.787Z\”) }
{ \”_id\” : 2, \”date\” : \”20177-02-09T03:35:02.055\” }
空值的粗粒 onNull
如果集合文档包含空日期字符串,$dateFromString返回空,除非给onNull指定一个聚合表达式。
例如,集合dates有以下文档:
{ \”_id\” : 1, \”date\” : \”2017-02-08T12:10:40.787\”, timezone: \”America/New_York\” },
{ \”_id\” : 2, \”date\” : null, timezone: \”America/New_York\” }
可以使用onNUll参数让$dateFromString返回代表unix纪元的日期,而不是空值:
db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: \’$date\’,
timezone: \’$timezone\’,
onNull: new Date(0)
}
}
}
} ] )
返回下面的结果:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }{ "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }
到此这篇关于MongoDB聚合运算符:$dateFromString的文章就介绍到这了,更多相关MongoDB $dateFromString内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!