mongodb - Meteor 预填充集合
问题描述
我在流星中做了以下收藏:
CodesData = new Mongo.Collection('CodesData');
CodesDataSchema = new SimpleSchema({
code: {
label: "Code",
type: Number
},
desc: {
label: "Description",
type: String,
}
});
CodesData.attachSchema(CodesDataSchema);
现在我想用一些数据预填充这个集合。例如:代码:1 描述:“你好”。我怎样才能手动轻松地做到这一点?
解决方案
一旦服务器应用程序已加载并正在启动,您可以使用 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 文件中,以便将定义与启动例程分开。
当前脚本不区分服务器或客户端。您应该考虑在服务器上执行此操作并围绕它创建发布/订阅。
更多阅读:
推荐阅读
- normalization - vlc 是否支持 android 中的“normvol”模块?
- c# - 实体框架中的 Distinct 或 Groupby
- azure - Azure 自动化 RunAs 帐户访问 Active Directory 资源
- java - 是否可以使用 ClassLoader 伪造缺失的类?
- elasticsearch - ElasticSearch 与 ElasticSearch+Cassandra
- javascript - 从浏览器脚本触发/执行java程序
- angular - 更新用户数据的日期选择器验证问题
- docker - selenium docker image selenium/node-chrome:3.11.0-dysprosium 适用于 Chrome 66,但使用 chrome 81 派生的自定义映像无法开始测试
- angular - Asp.Net core 3.1 put request failed: 无法将请求代理到http://weatherforecast/1,因为对代理目标的请求失败
- r - 如何取 2 列生成长度为 N 的序列并添加为 R 中的列?