【问题标题】:MongoDB adding years in existing ISODate fieldMongoDB 在现有 ISODate 字段中增加年份
【发布时间】:2016-06-24 08:22:17
【问题描述】:

我有一个 mongoDB 集合,其中的文档包含时间戳,即 ISO 日期。

不知何故,这些日期在插入时搞砸了,现在它们是 1970 年! 我已经修复了我的插入代码。现在它正在插入正确的时间戳。

但我现在需要修复日期为 1970 年的旧数据。我需要在每条记录的时间戳中添加一个特定的时间段。好像46年零5个月改成2016年6月。

例如
当前时间戳:
"timestamp": "1970-01-01T00:00:00.000Z"

新时间戳:
`“时间戳”:“2016-06-01T00:00:00.000Z”

然后将next的时间戳增加10秒

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

等等…… mongo shell可以吗?如果没有,我还能用什么?

【问题讨论】:

  • 没有明确的例子很难理解。您能否编辑您的问题以包含您现有的用于插入新文档的代码,也许是您收藏中的一些示例文档,这些文档展示了该问题?
  • @chridam,抱歉我不清楚。我已经修复了我的插入。我需要的是,我如何更新我的 1970 ISODates 并添加 46 年。需要从最后一个增加 10 秒。
  • 我对你原来的问题很感兴趣,是什么问题?修复插入时不应该更正日期吗?
  • @kazenorin,是的,新传入的数据具有正确的时间戳。我需要纠正旧的。查看更新的问题
  • 永远不要彻底改变你的问题,这完全不是你一开始要问的!

标签: node.js mongodb mongoose


【解决方案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中阅读更多内容

【讨论】:

  • 这很棒。但我意识到我需要继续增加它。 date.setSeconds(date.getSeconds+10) 会起作用吗?
  • 对,mongo repl就是node repl,也就是javascript repl
  • 其实不,我不需要当前日期。需要把1970-01-01 00:00:00.000Z变成1970-06-22 00:00:00.000Z每条记录增加10秒
  • 那么有什么问题。答案涵盖了您的需求,我会在 2 次迭代中完成,首先:转换年/月/日,其次:增加秒数,只需在 .forEach 之外创建一个变量,在内部增加它,然后分配给 $set
  • 是的,它确实涵盖了,只是指出我不需要当前日期。上一部分就是我所需要的。
猜你喜欢
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多