在Meteor中批量创建

Bulk create in Meteor

本文关键字:创建 Meteor      更新时间:2023-09-26

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

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

但我希望Meteor中有一个批量创建功能。如何以最快的方式插入这2000行?

Meteor本机不支持此功能。然而,它确实允许您访问节点Mongodb驱动程序,该驱动程序可以在本机中进行批量插入。

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

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

或者使用MongoDB 2.6,如果您的Meteor实例可以访问它:

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来创建同步代码
  • 这些文档是无序插入的,可能与您添加它们的原始顺序不同
  • 如果您的实例未启用oplog,Meteor可能需要10秒才能通过发布方法"反应性"查看文档

扩展@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);
};