作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在更改我的 MongoDB 集合之一的架构。 (我一直将日期存储为字符串,现在我的应用程序将它们存储为 ISODate
s;我需要返回并更改所有旧记录以使用 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 添加为新字段。一旦确认一切看起来都不错,您就可以取消设置字符串日期。
关于mongodb - 有没有办法执行更新操作的 "dry run"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610633/
我是一名优秀的程序员,十分优秀!