2016-12-29 1275 views
2

只是在練習我的MongoDB查詢,而且我用一個字段數據類型打了一堵牆。MongoDB:將日期字符串(mm/dd/yyyy)轉換爲Unix時間戳

我目前使用Robomongo作爲GUI訪問生產數據庫。

我的文檔結構如下:

Robomongo Document Structure

是否有MongoDB的操作或方式/方法將date字段值轉換,目前在mm/dd/yyyy格式,以Unix時間戳,所以我們可以進行過濾操作?

回答

0

您可以迭代所有項目並逐一更新,轉換爲Date。這裏是你的日期將從mm/dd/yyyyISODate一個例子:

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)。下面將分解你的日期字段爲daymonthyear,設置日期字段使用新的格式,並在名爲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" 
}]) 
+0

感謝@BertrandMartel。這是非常有用的,但是我期望在MongoDB中保持這一點,因爲這是聚合查詢的一部分。如果這一切都可能,我正在尋求避免使用Javascript,PHP等來進行轉換。是否有一個使用各種MongoDB運營商來實現這一目標的流程? –

+0

我已經更新了我的帖子一個辦法,你的字符串日期格式轉換爲'YYYY-MM-dd'這是不是你在第一時間想要什麼,但將保留排序比較'MM-DD-yyyy' –

相關問題