Javascript 流星中的批量生成

Javascript 流星中的批量生成,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,我需要在Meteor中一次创建2000个文档。我知道我可以用 for (i=0; i<2000; i++) { CollectionName.insert({}); } for(i=0;i以下是我的用法: /server/fixtures.js var insertIntoCollection = function(collection, dataArray){ dataArray.forEach(function(item){ collection.insert(i

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

for (i=0; i<2000; i++) {
    CollectionName.insert({});
}
for(i=0;i以下是我的用法:

/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);
};
以下是我使用的:

/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本机不支持此功能。但是,它确实允许您访问节点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来创建同步代码
  • 文档是无序插入的,可能与您添加文档的原始顺序不同
  • 如果您的实例未启用oplog,Meteor可能需要10秒钟才能通过发布方法“反应式”查看文档

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来创建同步代码
  • 文档是无序插入的,可能与您添加文档的原始顺序不同
  • 如果您的实例未启用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)();

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

你的方法是正确的。如果你想要一个大容量,那么看看这个:你的方法是正确的。如果你想要一个大容量,那么看看这个:简单的解决方案。Meteor 1.4将有Mongo 3.2和大容量插入。如果你没有10000个文档,这个解决方案将非常有效。简单的解决方案。Meteor 1.4将有Mongo 3.2和大容量插入。如果你没有“我没有10000个文档,这个解决方案可以很好地工作。有一件事让我大吃一惊:如果您有要插入的ObjectID,那么在插入原始集合时,您需要将它们转换为节点的ObjectID表示形式,而不是Meteor表示形式。
mongonternals.NpmModule.ObjectID(您的对象id.\u str)对我来说,它抛出了一个错误,然后我添加了上下文作为第二个参数,所以它工作了。
Meteor.wrapAsync(bulk.execute,bulk)()
有一件事让我大吃一惊:如果您有要插入的ObjectID,则在插入原始集合时,需要将它们转换为节点的ObjectID表示形式,而不是Meteor表示形式。
MongoInternals.NpmModule.ObjectID(您的对象id.\u str)对我来说,它抛出了一个错误,然后我添加了上下文作为第二个参数,所以它工作了。
Meteor.wrapAsync(bulk.execute,bulk)(;