【发布时间】:2013-05-12 17:10:36
【问题描述】:
我正在更改我的 MongoDB 集合之一的架构。 (我一直将日期存储为字符串,现在我的应用程序将它们存储为ISODates;我需要返回并更改所有旧记录以使用ISODates。)我想我知道该怎么做这使用了更新,但由于此操作会影响数万条记录,所以我很犹豫是否发出一个我不能 100% 确定是否会起作用的操作。有什么方法可以对更新进行“试运行”,以向我展示少量记录的原始记录以及如何更改它?
编辑:我最终使用了向每条记录添加一个新字段的方法,然后(在验证数据正确之后)重命名该字段以匹配原始字段。它看起来像这样:
db.events.find({timestamp: {$type: 2}})
.forEach( function (e) {
e.newTimestamp = new ISODate(e.timestamp);
db.events.save(e);
} )
db.events.update({},
{$rename: {'newTimestamp': 'timestamp'}},
{multi: true})
顺便说一句,将字符串时间转换为ISODates 的方法最终奏效了。 (我从this SO answer得到这个想法。)
【问题讨论】:
-
我的建议是将 ISODate 添加为新字段。一旦确认一切看起来都不错,您就可以取消设置字符串日期。
-
@JamesWahlin 有正确的想法,即使在支持空运行的 SQL 中我也不会这样做
-
@JamesWahlin 您可以添加您的评论作为答案吗?
标签: mongodb