MongoDB在现有ISODate字段中添加了多年

时间:2016-06-24 08:22:18

标签: node.js mongodb mongoose

我有一个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吗?如果没有,我还能用什么呢?

1 个答案:

答案 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

中阅读更多内容