流星mongocollection触摸

Meteor mongo collection touch

我想知道我是否可以在Meteor中对mongo个文档进行'touch'这样的操作。

我正在使用 aldeed:collection2 包来验证数据库架构。最近添加了一些具有默认值的新字段,我现在需要在我的数据库上执行迁移。

我的计划是 touch 所有文档,而不是为每个新字段编写单独的迁移,以便将使用 aldeed:simple-schema 定义的默认值应用于文档。

有触摸操作吗?我该如何继续?

只需遍历集合中的每个文档,validate,然后更新。这实际上是 "touch"-ing 每个文档。性能不应该是您关心的问题,因为这是一次性迁移。步骤是:

  1. 使用 SimpleSchema validate(doc) 验证文档,它会自动将 defaultValues 应用于文档对象
  2. collection.update(doc)

这是一个示例实现。

collection.find().forEach(function(doc) {
  MySchema.namedContext("myContext").validate(doc);
  collection.update({_id: doc._id}, doc);
});

应该可以!


注: 要利用 SimpleSchema,您显然必须从 Meteor 上下文(而不是 mongo)运行 这段代码,这在生产环境中可能很难做到。因此,您可以将此迁移编写为从客户端调用的服务器端方法(一定要保护它)或从 Meteor shell 如果根据您的实现,您有可用的方法。