首页 > 解决方案 > Meteor 预填充集合

问题描述

我在流星中做了以下收藏:

CodesData = new Mongo.Collection('CodesData');

CodesDataSchema = new SimpleSchema({
    code: {
        label: "Code",
        type: Number
    },
    desc: {
        label: "Description",
        type: String,
    }
});

CodesData.attachSchema(CodesDataSchema);

现在我想用一些数据预填充这个集合。例如:代码:1 描述:“你好”。我怎样才能手动轻松地做到这一点?

标签: mongodbmeteor

解决方案


一旦服务器应用程序已加载并正在启动,您可以使用 Meteor.startup 对您的集合运行一些操作:

CodesData = new Mongo.Collection('CodesData'); 
CodesDataSchema = new SimpleSchema({ code: { label: "Code", type: Number }, desc: { label: "Description", type: String, } }); 
.attachSchema(CodesDataSchema);

Meteor.startup(()=>{
  // Only fill if empty, otherwise
  // It would fill on each startup
  if (CodesData.find().count() === 0) {
    CodesData.insert({ code: 1, description: 'some description' });
  }
});

如果你有很多数据要预填充,你可以在 JSON 中定义它并在启动时加载它:

考虑以下名为 的 json pre

{
  codesdata: [
    { code: 1, description: 'foo' },
    { code: 7, description: 'bar' }
  ]
}

Meteor.startup(()=>{
  const preData = JSON.parse( pre );
  preData.codesData.forEach( entry => {
    CodesData.insert( entry );
  });
});

这使您可以更轻松地管理预填充,如果需要,还可以让您对 json 进行版本控制(并且不会泄露敏感数据)。

注意事项:

该函数Meteor.startup在每次启动时运行。因此,您应该考虑如何避免创建双打的不必要的插入/预填充。一个好方法是检查集合是否为空(参见第一个示例)。

您可以将启动代码放在另一个 js 文件中,以便将定义与启动例程分开。

当前脚本不区分服务器或客户端。您应该考虑在服务器上执行此操作并围绕它创建发布/订阅。

更多阅读:

https://docs.meteor.com/api/core.html#Meteor-startup

在 Meteor 中导入 JSON 文件

https://docs.meteor.com/api/core.html#Meteor-settings


推荐阅读