批量创buildmeteor

我需要在Meteor中一次创build2000个文档。 我知道我可以使用

for (i=0; i<2000; i++) { CollectionName.insert({}); } 

但我希望Meteor有一个批量创buildfunction。 我怎样才能以最快的方式插入这2000行?

meteor本身并不支持这一点。 但是,它确实可以访问可以本地执行批量插入的节点Mongodb驱动程序。

您只能在服务器上执行此操作:

 var x = new Mongo.Collection("xxx"); x.rawCollection.insert([doc1, doc2, doc3...], function(err, result) { console.log(err, result) }); 

或者如果您的Meteor实例有权访问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 } ); 

笔记:

  • 这不是同步的,也不是在光纤中运行,因为它使用原始节点驱动程序。 您需要使用Meteor.bindEnvironment或Meteor.wrapAsync来创build同步代码
  • 这些文档是无序插入的,可能不是您添加它们的原始顺序。
  • 如果您的实例未启用oplog,则Meteor可能需要10秒才能通过发布方法查看“Reactively”文档。

扩展Akshat的答案,这是在Meteor 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)(); 

以下是我使用的:

/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); };