尝试填充集合时,Meteor 应用程序崩溃
Meteor app crashes when trying to populate collections
此代码有效:
Schemas.City = new SimpleSchema({
name: {
type: String,
label: 'City',
unique: true
}
});
Cities = new Mongo.Collection('cities');
Cities.attachSchema(Schemas.City);
此代码有效:
Meteor.startup(function() {
}
此代码有效:
Cities.insert([{
name: 'Warszawa'
}, {
name: 'Krakow'
}]);
但是这段代码没有:
Meteor.startup(function() {
if (Cities.find().count() == 0) {
Cities.insert([{
name: 'Warszawa'
}, {
name: 'Krakow'
}]);
}
}
我在服务器的控制台中遇到以下错误:
W20150911-13:34:52.281(4)? (STDERR) Error: 0 is not allowed by the schema
W20150911-13:34:52.281(4)? (STDERR) at getErrorObject (packages/aldeed:collection2/collection2.js:417:1)
如您所见,我使用 aldeed:collection2 包来控制数据操作,以便它们遵循模式。 schema很简单,只要求不重复。
发现问题的正确方向是什么?我错过了什么吗?
更新:在 Meteor 中插入时没有数组
好的,我明白了。在 Meteor 中,无法使用
将多个条目插入到集合中
Collection.insert([entry1, entry2, ...])
语法。这反过来又有效:
Collection.insert(entry1);
Collection.insert(entry2);
所以问题解决了,大部分是部分解决。
在这种情况下,batchInsert
应该在 Meteor 中使用而不是 insert
:
Collection.batchInsert([entry1, entry2, ...])
你必须使用
var bulk = Meteor.Collection.get('cities').rawCollection().initializeUnorderedBulkOp();
cities.forEach(function(city){
bulk.insert(city)
})
bulk.execute();
以上代码未经测试,但应该可以。如果您想查看 initializeUnorderedBulkOp
此代码有效:
Schemas.City = new SimpleSchema({
name: {
type: String,
label: 'City',
unique: true
}
});
Cities = new Mongo.Collection('cities');
Cities.attachSchema(Schemas.City);
此代码有效:
Meteor.startup(function() {
}
此代码有效:
Cities.insert([{
name: 'Warszawa'
}, {
name: 'Krakow'
}]);
但是这段代码没有:
Meteor.startup(function() {
if (Cities.find().count() == 0) {
Cities.insert([{
name: 'Warszawa'
}, {
name: 'Krakow'
}]);
}
}
我在服务器的控制台中遇到以下错误:
W20150911-13:34:52.281(4)? (STDERR) Error: 0 is not allowed by the schema
W20150911-13:34:52.281(4)? (STDERR) at getErrorObject (packages/aldeed:collection2/collection2.js:417:1)
如您所见,我使用 aldeed:collection2 包来控制数据操作,以便它们遵循模式。 schema很简单,只要求不重复。
发现问题的正确方向是什么?我错过了什么吗?
更新:在 Meteor 中插入时没有数组
好的,我明白了。在 Meteor 中,无法使用
将多个条目插入到集合中Collection.insert([entry1, entry2, ...])
语法。这反过来又有效:
Collection.insert(entry1);
Collection.insert(entry2);
所以问题解决了,大部分是部分解决。
batchInsert
应该在 Meteor 中使用而不是 insert
:
Collection.batchInsert([entry1, entry2, ...])
你必须使用
var bulk = Meteor.Collection.get('cities').rawCollection().initializeUnorderedBulkOp();
cities.forEach(function(city){
bulk.insert(city)
})
bulk.execute();
以上代码未经测试,但应该可以。如果您想查看 initializeUnorderedBulkOp