1

此代码有效:

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包来控制数据操作,以便它们坚持模式。架构很简单,只要求没有重复项。

发现问题的正确方向是什么?我错过了什么吗?

更新:在 Meteor 中插入时没有数组

好的,我明白了。在 Meteor 中,无法使用

Collection.insert([entry1, entry2, ...])

句法。反过来,这有效:

Collection.insert(entry1);
Collection.insert(entry2);

所以问题解决了,大部分是部分解决的。

4

2 回答 2

3

batchInsert应该在 Meteor 中使用,而不是insert在这种情况下:

Collection.batchInsert([entry1, entry2, ...])
于 2016-02-16T15:41:03.763 回答
0

你必须使用

var bulk = Meteor.Collection.get('cities').rawCollection().initializeUnorderedBulkOp();
cities.forEach(function(city){
  bulk.insert(city)
})
bulk.execute();

上面的代码未经测试,但应该可以工作。如果你想调查initializeUnorderedBulkOp

于 2016-12-08T20:21:33.123 回答