寻找在我的Meteor应用中修复数据格式的最佳方法。当我开始时,我没有使用像SimpleSchema 或这样的东西,就像我应该使用Date格式一样。
所以现在我想把所有东西都归还给正确的Date对象。
我仍然是Mongo的新人,我有点惊讶地发现 - 如果我错了,请纠正我 - 没有办法更新所有记录并修改使用其当前值的属性。我有来自API POST的时间戳,可能是String
s,new Date().getTime()
的纪元时间,某些实际的Date
等等。
我打算用moment(currentValue).toDate()来解决这个问题。我使用percolate:migrations进行数据更改1)以便更改保留在我的仓库中; 2)因此,无论应用程序在何处运行,数据都是一致的。我已经查看了this question,我认为我需要迭代我的收藏品。但是Meteor中没有snapshot()
可用。
我是否需要为此编写并手动运行mongo脚本?
答案 0 :(得分:0)
通常我更喜欢从mongo shell运行迁移脚本,因为它更容易执行(与部署运行迁移的代码相比),并且它允许您访问完整的mongo api。如果要预先定义脚本,可以在mongo控制台中运行load(path/to/script)
。
snapshot()
确保您不会两次修改同一文档。来自MongoDB docs
将snapshot()方法附加到游标以切换“快照”模式。这可以确保查询不会多次返回文档,即使由于文档大小的增加而干预写入操作也会导致文档移动。
不使用snapshot()
运行可能会导致将日期对象(刚刚转换)传递给更新函数。既然你计划已经覆盖了这个案例(你说你的数据库中已经有了一些日期对象),它并没有太大变化。你可以在没有snapshot()
的情况下从meteor运行它,但你也可以使用shell来习惯它:)
您是正确的,无法根据文档的当前值更新文档。循环遍历所有文档并逐个更新它们是相当慢的,所以如果你有一个庞大的集合,你可能想要安排一些停机时间。