我需要在Meteor中一次创建2000个文档。我知道我可以使用批量创建流星
for (i=0; i<2000; i++) {
CollectionName.insert({});
}
但我希望Meteor有一个批量创建功能。我怎样才能以最快的方式插入这2000行?
我需要在Meteor中一次创建2000个文档。我知道我可以使用批量创建流星
for (i=0; i<2000; i++) {
CollectionName.insert({});
}
但我希望Meteor有一个批量创建功能。我怎样才能以最快的方式插入这2000行?
流星本身并不支持这一点。但是,它可以让您访问可以本地执行批量插入的节点Mongodb驱动程序。
你只能做到这一点的服务器上:
var x = new Mongo.Collection("xxx");
x.rawCollection.insert([doc1, doc2, doc3...], function(err, result) {
console.log(err, result)
});
或用MongoDB的2.6,如果您的流星实例访问它:
var bulk = x.initializeUnorderedBulkOp();
bulk.insert({ _id: 1, item: "abc123", status: "A", soldQty: 5000 });
bulk.insert({ _id: 2, item: "abc456", status: "A", soldQty: 150 });
bulk.insert({ _id: 3, item: "abc789", status: "P", soldQty: 0 });
bulk.execute({ w: "majority", wtimeout: 5000 });
注:
下面是我用什么:
/server/fixtures.js
var insertIntoCollection = function(collection, dataArray){
dataArray.forEach(function(item){
collection.insert(item);
});
};
if (Stuff.find().count() === 0) {
var array = [
{
// document1
},{
// document2
}
];
insertIntoCollection(Stuff, array);
};
简单的解决方案。 Meteor 1.4将使用Mongo 3.2和Bulk Insert。如果您没有10,000个文档,此解决方案将非常好地工作。 – TheBetterJORT
扩展@ Akshat的答案,这是将在流星1.0+
x = new Mongo.Collection("x");
var bulk = x.rawCollection().initializeUnorderedBulkOp();
bulk.insert({ _id: 1, item: "abc123", status: "A", soldQty: 5000 });
bulk.insert({ _id: 2, item: "abc456", status: "A", soldQty: 150 });
bulk.insert({ _id: 3, item: "abc789", status: "P", soldQty: 0 });
Meteor.wrapAsync(bulk.execute)();
有一件事让我绊倒了:如果你有ObjectID试图插入,你需要将它们转换为Node的ObjectID表示,而不是Meteor的插入到原始集合中时.'MongoInternals.NpmModule.ObjectID(your_obj_id。 _STR);' – vroomfondel
工作,你的方法是正确的语法。如果你想要一个批量然后看 http://stackoverflow.com/questions/19757434/bulk-mongodb-insert-in-meteor-or-node –
看看这个:http://www.markdrew.co .uk/blog/post.cfm/imports-json-into-a-meteor-mongo-database – Billybobbonnet