【问题标题】:change collection data formats within Meteor在 Meteor 中更改收集数据格式
【发布时间】:2015-08-28 19:24:09
【问题描述】:

寻找修复 Meteor 应用中数据格式的最佳方法。当我开始时,我没有使用像 SimpleSchema 或这样的东西,因为我应该使用 Date 格式。

所以现在我想把一切都恢复到正确的 Date 对象。

我还是 Mongo 的新手,我有点惊讶地发现 - 如果我错了,请纠正我 - 没有办法更新所有记录并使用其当前值修改属性。我有来自 API POST 的时间戳,可能是 Strings,纪元时间来自 new Date().getTime(),一些实际的 Dates,等等。

我打算使用 moment(currentValue).toDate() 来解决这个问题。我正在使用 percolate:migrations 进行数据更改 1)以便更改保留在我的存储库中和 2)因此无论应用程序在何处运行,数据都是一致的。我查看了this question,我认为我需要遍历我的集合。但是 snapshot() 在 Meteor 中不可用。

我需要为此编写并手动运行 mongo 脚本吗?

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    一般来说,我更喜欢从 mongo shell 运行迁移脚本,因为它更容易执行(与部署运行迁移的代码相比),并且它使您可以访问完整的 mongo api。如果你想预先定义你的脚本,你可以在 mongo 控制台中运行load(path/to/script)。

    snapshot() 确保您不会两次修改同一个文档。来自MongoDB docs

    将 snapshot() 方法附加到光标以切换“快照”模式。这样可以确保查询不会多次返回一个文档,即使由于文档大小的增长,干预写入操作导致文档移动也是如此。

    在没有snapshot() 的情况下运行可能会导致将日期对象(刚刚转换)传递给您的更新函数。由于您已经计划涵盖这种情况(您是说您的数据库中已经有一些日期对象)它并没有太大变化。因此,您可以在没有 snapshot() 的情况下从流星运行它,但您不妨使用 shell 来习惯它:)

    你说得对,没有办法根据当前值更新文档。循环遍历所有文档并一个一个地更新它们是相当慢的,所以如果你有一个庞大的集合,你可能需要安排一些停机时间。

    【讨论】:

    • 谢谢@datacarl。疯了,我实际上必须更新每一个。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    相关资源
    最近更新 更多