蔬菜基地做網(wǎng)站合適嗎金戈枸櫞酸西地那非片
文章目錄
- 語法
- 使用
- 使用例子對規(guī)則進行說明
- 格式指示符
- 舉例
- 日期轉(zhuǎn)換
- 錯誤處理onError
- 空值的粗粒 onNull
$dateFromString
聚合運算符將日期時間字符串轉(zhuǎn)換為日期對象。
語法
{ $dateFromString: {dateString: <dateStringExpression>,format: <formatStringExpression>,timezone: <tzExpression>,onError: <onErrorExpression>,onNull: <onNullExpression>
} }
參數(shù)字段說明:
字段 | 必須 | 說明 |
---|---|---|
dateString | 如果沒有用isoWeekYear 則必須 | 日歷年度,可以是任何能解析為整數(shù)的表達式,值域為:1~9999,如果超出范圍將報錯。從4.4以后最小值為1,再之前的版本最小值是0 |
format | 若year沒有用則必須 | ISO的周日期年,可以是任何能解析為整數(shù)的表達式,值域為:1~9999,如果超出將報錯。從4.4以后最小值為1,再之前的版本最小值是0 |
timezone | 可選 | 執(zhí)行操作的時區(qū),<timezone> 可以是任何能被解析為:Olson時區(qū)標識符或UTC偏移量 |
onError | 可選 | 在解析dateString 時如果出錯,則輸出onError 表達式的結(jié)果,結(jié)果值可以是任意類型 |
onNull | 可選 | 如果dateString 為null 或不存在,則輸出onNull 表達式的結(jié)果,可以是任意類型 |
使用
使用例子對規(guī)則進行說明
例1:
{ $dateFromString: {dateString: "2017-02-08T12:10:40.787"
} }
結(jié)果:ISODate("2017-02-08T12:10:40.787Z")
例2:
{ $dateFromString: {dateString: "2017-02-08T12:10:40.787",timezone: "America/New_York"
} }
結(jié)果:ISODate("2017-02-08T12:10:40.787Z")
例3:
{ $dateFromString: {dateString: "2017-02-08"
} }
結(jié)果:ISODate("2017-02-08T00:00:00Z")
例4:
{ $dateFromString: {dateString: "oct 20 2020"
} }
結(jié)果:ISODate("2020-10-20T00:00:00.000Z")
例5:
{ $dateFromString: {dateString: "06-15-2018",format: "%m-%d-%Y"
} }
結(jié)果:ISODate("2018-06-15T00:00:00Z")
例6:
{ $dateFromString: {dateString: "15-06-2018",format: "%d-%m-%Y"
} }
結(jié)果:ISODate("2018-06-15T00:00:00Z")
{ $dateFromString: {dateString: "WED jan 31 12:05:28 +03:30 1996"
} }
結(jié)果:ISODate("1996-01-31T08:35:28.000Z")
格式指示符
指示符 | 描述 | 可能的值 |
---|---|---|
%b | 月份縮寫(3個字符) | jan , feb , mar , apr , may , jun , jul , aug , sep , oct , nov , dec |
%B | 完整月份 | january -december |
%d | 一個月內(nèi)的第幾天(2個數(shù)字,0填充) | 01 -31 |
%G | ISO8601格式 年 | 0000-9999 |
%H | 小時(2個數(shù)字,0填充,24小時時鐘) | 00-23 |
%j | 一年內(nèi)的第幾天(3個數(shù)字,0填充) | 001-366 |
%L | 毫秒(3個數(shù)字,0填充) | 000=999 |
%m | 月(2個數(shù)字,0填充) | 01-12 |
%M | 分鐘(2個數(shù)字,0填充) | 00-59 |
%S | 秒(2個數(shù)字,0填充) | 00-60 |
%u | ISO8601格式的一周內(nèi)的第幾天 | 1-7 |
%U | 一年內(nèi)的第幾周(2個數(shù)字,0填充) | 00-53 |
%V | ISO8601格式的一年內(nèi)的第幾周 | 1-53 |
%w | 一周內(nèi)的第幾天(整數(shù),0-Sunday,6-Saturday) | 0-6 |
%Y | 年(4個數(shù)字,0填充) | 0000-9999 |
%z | 時區(qū)與UTC的偏移量 | +/-[hh][mm] |
%Z | 從 UTC 開始的分鐘偏移量,用數(shù)字表示。例如,如果時區(qū)偏移(+/-[hhmm])為 +0445 ,則分鐘偏移為+285 。 | +/-mmm |
%% | 百分比字符作為字面值 | % |
舉例
日期轉(zhuǎn)換
集合logmessages
包含下面的數(shù)據(jù):
{ _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
將日期值轉(zhuǎn)換為日期對象:
db.logmessages.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: 'America/New_York'}}}
} ] )
上述匯總返回以下文檔,并將每個日期字段轉(zhuǎn)換為東部時區(qū):
{ "_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") }
也可以通過文檔字段提供時區(qū)參數(shù),而不是硬編碼參數(shù)。例如:
db.logmessages.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: '$timezone'}}}
} ] )
上述匯總返回以下文檔,并將每個date
字段轉(zhuǎn)換為各自的 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
會出錯,除非給參數(shù)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
參數(shù)以原始字符串形式返回無效日期:
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
參數(shù)讓$dateFromString
返回代表unix紀元的日期,而不是空值:
db.dates.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: '$timezone',onNull: new Date(0)}}}
} ] )
返回下面的結(jié)果:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }