我在流星上收集了以下内容:
CodesData = new Mongo.Collection('CodesData');
CodesDataSchema = new SimpleSchema({
code: {
label: "Code",
type: Number
},
desc: {
label: "Description",
type: String,
}
});
CodesData.attachSchema(CodesDataSchema);
现在,我想用一些数据预填充该集合。 例如:代码:1 desc:“ hello”。 如何手动轻松地做到这一点?
答案 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