有没有办法执行更新操作的"干运行"?

bde*_*ham 15 mongodb

我正在更改一个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})
Run Code Online (Sandbox Code Playgroud)

顺便说一下,将字符串时间转换为ISODates的方法最终起作用了.(我从这个SO答案中得到了这个想法.)

eid*_*tor 5

用您的数据库结构创建一个测试环境。将少量记录复制到其中。问题解决了。我敢肯定,这不是您要找的解决方案。但是,我相信,这正是应该使用“测试环境”的确切情况。


Jam*_*lin 5

我的建议是将ISODate添加为新字段。一旦确认一切看起来不错,您就可以取消设置字符串日期。