我正在更改我的一个MongoDB集合的模式。 (我一直在将日期存储为字符串,现在我的应用程序将它们存储为ISODate
;我需要返回并更改所有旧记录以使用ISODate
s)。我想我知道如何使用更新,但由于这个操作会影响成千上万的记录,所以我不愿意发出一个我不能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})
顺便说一句,对于字符串时间转换为ISODate
s表示方法是什么结束了工作。 (我从this SO answer得到了想法。)
我的建议是将ISODate添加为一个新字段。一旦确认一切看起来不错,您可以取消设置字符串日期。 –
@JamesWahlin即使在支持干运行的SQL中也有正确的想法,我不会这样做 – Sammaye
@JamesWahlin你可以添加你的评论作为答案吗? – bdesham