2016-06-24 49 views
0

我有一個mongoDB集合,其中包含ISO日期的時間戳。MongoDB在現有的ISODate字段中添加年份

不知何故,這些日期在插入時變得搞砸了,現在它們在1970年! 我已經修復了我的插入代碼。現在它插入正確的時間戳。

但我需要修復其日期在1970年的舊數據。我需要在每條記錄的時間戳中添加一個特定的時間段。如同46年和5個月一樣,將其改爲2016年6月。


當前時間戳:
"timestamp": "1970-01-01T00:00:00.000Z"

新的時間戳:
` 「時間戳」: 「2016-06-01T00:00:00.000Z」

然後增加下一個時間戳10秒

"timestamp": "2016-06-01T00:00:20.000Z"
"timestamp": "2016-06-01T00:00:30.000Z"

等等... 是可以從蒙戈的殼呢?如果不是,我還能使用什麼?

+0

很難遵循,沒有明確的例子。你可以編輯你的問題,包括你現有的代碼插入新的文件,也許從你的收藏展示這個問題的一些示例文件? – chridam

+0

@chridam,對不起,我不清楚。我已經修復了我的插入。我需要的是,我如何更新我的1970 ISODates併爲他們添加46年。需要從最後一個增加10秒。 –

+1

我對你最初的問題感興趣,它是什麼?在修正插入時,不應該修正日期嗎? – kazenorin

回答

1
// for demo, create a record with some date 
> db.so.insert({_id: new ObjectId(), date: new Date(1970, 1, 1, 10, 10, 10)}) 
WriteResult({ "nInserted" : 1 }) 

// be sure it's created 
> db.so.find() 
{ "_id" : ObjectId("576ceec5827bed78eaa65cc6"), "date" : ISODate("1970-02-01T04:10:10Z") } 

// docs.forEach => update.doc.date => new Date(oldDate: hours, minutes, seconds) 
> db.so.find().forEach(function(doc) { var date = doc.date; db.so.update({_id: doc._id}, {$set: {date: new Date(2016, 5, date.getDay(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())}}) }) 

我用

col.find().forEach(){ col.update() } 

,因爲你需要的文件的舊日期,如果你不與舊日期打擾,你可以使用

db.so.update({}, {$set: {date: new Date()}}) 

甚至更​​好,可以用$ currentDate運營商

db.so.update({}, {$currentDate: {date: {$type: 'date'}}}) 

Re ad more more in mongo doc $currentDate

+0

這真是太棒了。但是我意識到當我繼續時我需要增加它。 'date.setSeconds(date.getSeconds + 10)'會起作用嗎? –

+0

是的,mongo repl是node repl,它是javascript repl –

+0

其實不,我不需要當前的日期。 需要將'1970-01-01 00:00:00.000Z'變成'1970-06-22 00:00:00.000Z'並在每個記錄中增加10秒 –