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

batchInsertinsertこの場合の代わりに Meteor で使用する必要があります。

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 に答える