2
只是在練習我的MongoDB查詢,而且我用一個字段數據類型打了一堵牆。MongoDB:將日期字符串(mm/dd/yyyy)轉換爲Unix時間戳
我目前使用Robomongo作爲GUI訪問生產數據庫。
我的文檔結構如下:
是否有MongoDB的操作或方式/方法將date
字段值轉換,目前在mm/dd/yyyy
格式,以Unix時間戳,所以我們可以進行過濾操作?
只是在練習我的MongoDB查詢,而且我用一個字段數據類型打了一堵牆。MongoDB:將日期字符串(mm/dd/yyyy)轉換爲Unix時間戳
我目前使用Robomongo作爲GUI訪問生產數據庫。
我的文檔結構如下:
是否有MongoDB的操作或方式/方法將date
字段值轉換,目前在mm/dd/yyyy
格式,以Unix時間戳,所以我們可以進行過濾操作?
您可以迭代所有項目並逐一更新,轉換爲Date
。這裏是你的日期將從mm/dd/yyyy
到ISODate
一個例子:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]);
db.test.save(res)
}
}
)
對於Unix時間戳(米利斯從時代),你可以調用getTime()
從Date
:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]).getTime();
db.test.save(res)
}
}
)
注意,這些日期將被轉換轉換爲UTC格式,因此您可能需要在進行轉換之前臨時更改您的時區
如果您想優化更新性能,您還可以使用bulk update
您也可以將您的日期轉換爲yyyy-mm-dd
,這將保留排序(檢查this post)。下面將分解你的日期字段爲day
,month
和year
,設置日期字段使用新的格式,並在名爲test2
新的集合寫輸出:
db.test.aggregate([{
$project: {
startTime: 1,
endTime: 1,
date: {
$let: {
vars: {
year: { $substr: ["$date", 6, 10] },
month: { $substr: ["$date", 0, 2] },
dayOfMonth: { $substr: ["$date", 3, 2] }
},
in : { $concat: ["$$year", "-", "$$month", "-", "$$dayOfMonth"] }
}
}
}
},{
$out :"test2"
}])
感謝@BertrandMartel。這是非常有用的,但是我期望在MongoDB中保持這一點,因爲這是聚合查詢的一部分。如果這一切都可能,我正在尋求避免使用Javascript,PHP等來進行轉換。是否有一個使用各種MongoDB運營商來實現這一目標的流程? –
我已經更新了我的帖子一個辦法,你的字符串日期格式轉換爲'YYYY-MM-dd'這是不是你在第一時間想要什麼,但將保留排序比較'MM-DD-yyyy' –