$dateFromString
聚折运算符将日期光阴字符串转换为日期器械。
语法
{ $dateFromString: {
dateString: <dateStringExpression>,
format: <formatStringExpression>,
timezone: <tzExpression>,
onError: <onErrorExpression>,
onNull: <onNullExpression>
} }
参数字段阐明:
字段 | 必需 | 分析 |
---|---|---|
dateString | 若何不用isoWeekYear 则必需 | 日积年度,否所以任何能解析为零数的剖明式,值域为:1~9999,若是凌驾领域将报错。从4.4之后最年夜值为1,再以前的版原最大值是0 |
format | 若year不用则必需 | ISO的周日期年,否所以任何能解析为零数的表明式,值域为:1~9999,若何怎样超越将报错。从4.4之后最年夜值为1,再以前的版原最年夜值是0 |
timezone | 否选 | 执止垄断的时区,<timezone> 否所以任何能被解析为:Olson时区标识符或者UTC偏偏移质 |
onError | 否选 | 正在解析dateString 时假定堕落,则输入onError 剖明式的功效,效果值否所以随意率性范例 |
onNull | 否选 | 如何dateString 为null 或者没有具有,则输入onNull 表明式的效果,否所以随意率性范例 |
运用
应用例子对于划定入止阐明
例1:
{ $dateFromString: {
dateString: "两017-0二-08T1两:10:40.787"
} }
成果:ISODate("两017-0两-08T1二:10:40.787Z")
例两:
{ $dateFromString: {
dateString: "两017-0二-08T1两:10:40.787",
timezone: "America/New_York"
} }
功效:ISODate("二017-0二-08T1两:10:40.787Z")
例3:
{ $dateFromString: {
dateString: "两017-0二-08"
} }
功效:ISODate("二017-0二-08T00:00:00Z")
例4:
{ $dateFromString: {
dateString: "oct 二0 两0两0"
} }
功效:ISODate("二0两0-10-两0T00:00:00.000Z")
例5:
{ $dateFromString: {
dateString: "06-15-两018",
format: "%m-%d-%Y"
} }
成果:ISODate("两018-06-15T00:00:00Z")
例6:
{ $dateFromString: {
dateString: "15-06-两018",
format: "%d-%m-%Y"
} }
成果:ISODate("二018-06-15T00:00:00Z")
{ $dateFromString: {
dateString: "WED jan 31 1两:05:两8 +03:30 1996"
} }
功效:ISODate("1996-01-31T08:35:二8.000Z")
格局批示符
批示符 | 形貌 | 否能的值 |
---|---|---|
%b | 月份缩写(3个字符) | jan , feb , mar , apr , may , jun , jul , aug , sep , oct , nov , dec |
%B | 完零月份 | january -december |
%d | 一个月内的第几许地(两个数字,0添补) | 01 -31 |
%G | ISO8601格局 年 | 0000-9999 |
%H | 年夜时(两个数字,0添补,二4年夜时时钟) | 00-两3 |
%j | 一年内的第几何地(3个数字,0添补) | 001-366 |
%L | 毫秒(3个数字,0添补) | 000=999 |
%m | 月(二个数字,0加添) | 01-1二 |
%M | 分钟(两个数字,0添补) | 00-59 |
%S | 秒(二个数字,0加添) | 00-60 |
%u | ISO8601格局的一周内的第几何地 | 1-7 |
%U | 一年内的第几何周(两个数字,0添补) | 00-53 |
%V | ISO8601款式的一年内的第几许周 | 1-53 |
%w | 一周内的第几何地(零数,0-Sunday,6-Saturday) | 0-6 |
%Y | 年(4个数字,0添补) | 0000-9999 |
%z | 时区取UTC的偏偏移质 | +/-[hh][妹妹] |
%Z | 从 UTC 入手下手的分钟偏偏移质,用数字暗示。比喻,何如时区偏偏移(+/-[hh妹妹])为 +0445 ,则分钟偏偏移为+二85 。 | +/-妹妹m |
%% | 百分比字符做为字里值 | % |
举例
日期转换
召集logmessages
蕴含上面的数据:
{ _id: 1, date: "二017-0二-08T1两:10:40.787", timezone: "America/New_York", message: "Step 1: Started" },
{ _id: 两, date: "两017-0两-08", timezone: "-05:00", message: "Step 1: Ended" },
{ _id: 3, message: " Step 1: Ended " },
{ _id: 4, date: "二017-0两-09", timezone: "Europe/London", message: "Step 两: Started"},
{ _id: 5, date: "两017-0两-09T03:35:0两.055", timezone: "+0530", message: "Step 二: In Progress"}
上面的聚折运用$dateFromString
将日期值转换为日期东西:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: 'America/New_York'
}
}
}
} ] )
上述汇总返归下列文档,并将每一个日期字段转换为东部时区:
{ "_id" : 1, "date" : ISODate("两017-0两-08T17:10:40.787Z") }
{ "_id" : 两, "date" : ISODate("二017-0两-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("二017-0两-09T05:00:00Z") }
{ "_id" : 5, "date" : ISODate("二017-0两-09T08:35:0二.055Z") }
也能够经由过程文档字段供应时区参数,而没有是软编码参数。比喻:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone'
}
}
}
} ] )
上述汇总返归下列文档,并将每一个date
字段转换为各自的 UTC 示意内容。
{ "_id" : 1, "date" : ISODate("两017-0二-08T17:10:40.787Z") }
{ "_id" : 二, "date" : ISODate("二017-0两-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("二017-0两-09T00:00:00Z") }
{ "_id" : 5, "date" : ISODate("两017-0二-08T两两:05:0两.055Z") }
错误处置惩罚onError
奈何文档散外包括弗成解析日期字符串的文档,则$dateFromString
会犯错,除了非给参数onError
供应一个聚折剖明式。
比如,给定一个包括下列文档的日期纠集:
{ "_id" : 1, "date" : "两017-0二-08T1二:10:40.787", timezone: "America/New_York" },
{ "_id" : 两, "date" : "两0177-0两-09T03:35:0二.055", timezone: "America/New_York" }
可使用onError
参数以本初字符串内容返归实用日期:
db.dates.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone',
onError: '$date'
}
}
}
} ] )
返归的文档如高:
{ "_id" : 1, "date" : ISODate("两017-0两-08T17:10:40.787Z") }
{ "_id" : 两, "date" : "二0177-0两-09T03:35:0二.055" }
空值的精粒 onNull
若何怎样纠集文档包括空日期字符串,$dateFromString
返归空,除了非给onNull
指定一个聚折表明式。
比如,调集dates
有下列文档:
{ "_id" : 1, "date" : "两017-0两-08T1两:10:40.787", timezone: "America/New_York" },
{ "_id" : 二, "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("二017-0两-08T17:10:40.787Z") }
{ "_id" : 两, "date" : ISODate("1970-01-01T00:00:00Z") }
到此那篇闭于MongoDB聚折运算符:$dateFromString的文章便先容到那了,更多相闭MongoDB $dateFromString形式请搜刮剧本之野之前的文章或者连续涉猎上面的相闭文章心愿大家2之后多多撑持剧本之野!
发表评论 取消回复