流星预填充集合

时间:2018-07-09 13:03:21

标签: mongodb meteor

我在流星上收集了以下内容:

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

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

CodesData.attachSchema(CodesDataSchema);

现在,我想用一些数据预填充该集合。 例如:代码:1 desc:“ hello”。 如何手动轻松地做到这一点?

1 个答案:

答案 0 :(得分:2)

服务器应用程序加载并启动后,您可以使用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中定义它并在启动时加载它:

考虑以下名为pre的json:

{
  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

Importing a JSON file in Meteor

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