MongoDB聚合運(yùn)算符$dateFromString詳解
$dateFromString聚合運(yùn)算符將日期時(shí)間字符串轉(zhuǎn)換為日期對(duì)象。
語(yǔ)法
{ $dateFromString: {
dateString: <dateStringExpression>,
format: <formatStringExpression>,
timezone: <tzExpression>,
onError: <onErrorExpression>,
onNull: <onNullExpression>
} }參數(shù)字段說(shuō)明:
| 字段 | 必須 | 說(shuō)明 |
|---|---|---|
dateString | 如果沒(méi)有用isoWeekYear則必須 | 日歷年度,可以是任何能解析為整數(shù)的表達(dá)式,值域?yàn)椋?~9999,如果超出范圍將報(bào)錯(cuò)。從4.4以后最小值為1,再之前的版本最小值是0 |
format | 若year沒(méi)有用則必須 | ISO的周日期年,可以是任何能解析為整數(shù)的表達(dá)式,值域?yàn)椋?~9999,如果超出將報(bào)錯(cuò)。從4.4以后最小值為1,再之前的版本最小值是0 |
timezone | 可選 | 執(zhí)行操作的時(shí)區(qū),<timezone>可以是任何能被解析為:Olson時(shí)區(qū)標(biāo)識(shí)符或UTC偏移量 |
onError | 可選 | 在解析dateString時(shí)如果出錯(cuò),則輸出onError表達(dá)式的結(jié)果,結(jié)果值可以是任意類(lèi)型 |
onNull | 可選 | 如果dateString為null或不存在,則輸出onNull表達(dá)式的結(jié)果,可以是任意類(lèi)型 |
使用
使用例子對(duì)規(guī)則進(jìn)行說(shuō)明
例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 | 月份縮寫(xiě)(3個(gè)字符) | jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec |
| %B | 完整月份 | january-december |
| %d | 一個(gè)月內(nèi)的第幾天(2個(gè)數(shù)字,0填充) | 01-31 |
| %G | ISO8601格式 年 | 0000-9999 |
| %H | 小時(shí)(2個(gè)數(shù)字,0填充,24小時(shí)時(shí)鐘) | 00-23 |
| %j | 一年內(nèi)的第幾天(3個(gè)數(shù)字,0填充) | 001-366 |
| %L | 毫秒(3個(gè)數(shù)字,0填充) | 000=999 |
| %m | 月(2個(gè)數(shù)字,0填充) | 01-12 |
| %M | 分鐘(2個(gè)數(shù)字,0填充) | 00-59 |
| %S | 秒(2個(gè)數(shù)字,0填充) | 00-60 |
| %u | ISO8601格式的一周內(nèi)的第幾天 | 1-7 |
| %U | 一年內(nèi)的第幾周(2個(gè)數(shù)字,0填充) | 00-53 |
| %V | ISO8601格式的一年內(nèi)的第幾周 | 1-53 |
| %w | 一周內(nèi)的第幾天(整數(shù),0-Sunday,6-Saturday) | 0-6 |
| %Y | 年(4個(gè)數(shù)字,0填充) | 0000-9999 |
| %z | 時(shí)區(qū)與UTC的偏移量 | +/-[hh][mm] |
| %Z | 從 UTC 開(kāi)始的分鐘偏移量,用數(shù)字表示。例如,如果時(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)換為日期對(duì)象:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: 'America/New_York'
}
}
}
} ] )上述匯總返回以下文檔,并將每個(gè)日期字段轉(zhuǎn)換為東部時(shí)區(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") }也可以通過(guò)文檔字段提供時(shí)區(qū)參數(shù),而不是硬編碼參數(shù)。例如:
db.logmessages.aggregate( [ {
$project: {
date: {
$dateFromString: {
dateString: '$date',
timezone: '$timezone'
}
}
}
} ] )上述匯總返回以下文檔,并將每個(gè)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") }錯(cuò)誤處理onError
如果文檔集中包含不可解析日期字符串的文檔,則$dateFromString會(huì)出錯(cuò),除非給參數(shù)onError提供一個(gè)聚合表達(dá)式。
例如,給定一個(gè)包含以下文檔的日期集合:
{ "_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ù)以原始字符串形式返回?zé)o效日期:
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指定一個(gè)聚合表達(dá)式。
例如,集合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紀(jì)元的日期,而不是空值:
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") }
到此這篇關(guān)于MongoDB聚合運(yùn)算符:$dateFromString的文章就介紹到這了,更多相關(guān)MongoDB $dateFromString內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB通過(guò)查詢(xún)與游標(biāo)徹底玩轉(zhuǎn)分布式文件存儲(chǔ)
MongoDB最大的特點(diǎn)是它支持的查詢(xún)語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵?xún)語(yǔ)言,幾乎可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢(xún)的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引,這篇文章主要介紹了MongoDB查詢(xún)與游標(biāo),徹底玩轉(zhuǎn)分布式文件存儲(chǔ),需要的朋友可以參考下2023-01-01
MongoDB詭異問(wèn)題之sh.stopBalancer卡住的解決方法
這篇文章主要給大家介紹了關(guān)于MongoDB詭異問(wèn)題之sh.stopBalancer卡住解決的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
CentOS7下安裝MongoDB數(shù)據(jù)庫(kù)過(guò)程
大家好,本篇文章主要講的是CentOS7下安裝MongoDB數(shù)據(jù)庫(kù)過(guò)程,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽2021-12-12
MongoDB服務(wù)端JavaScript腳本使用方法
這篇文章主要介紹了MongoDB服務(wù)端JavaScript腳本使用方法,需要的朋友可以參考下2015-10-10
MongoDB安裝到windows服務(wù)的方法及遇到問(wèn)題的完美解決方案
這篇文章主要介紹了MongoDB安裝到windows服務(wù)的方法及遇到問(wèn)題的完美解決方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11

