我有一个mongoDB集合,其中包含时间戳为ISO Date的文档。
不知何故,这些日期在插入时搞砸了,现在它们是在1970年! 我修复了我的插入代码。现在它正在插入正确的时间戳。
但我需要修复日期在1970年的旧数据。我需要在每条记录的时间戳中添加一个特定的时间段。比如将46年和5个月改为2016年6月。
e.g
当前时间戳:
"timestamp": "1970-01-01T00:00:00.000Z"
新时间戳:
`“timestamp”:“2016-06-01T00:00:00.000Z”
,然后将下一个时间戳增加10秒
"timestamp": "2016-06-01T00:00:20.000Z"
"timestamp": "2016-06-01T00:00:30.000Z"
依旧...... 有可能来自mongo shell吗?如果没有,我还能用什么呢?
答案 0 :(得分: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'}}})
在mongo doc $currentDate
中阅读更多内容