在Meteor中批量创建
Bulk create in Meteor
我需要在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);
};
相关文章:
- 如何在Meteor中使用Famo.us创建Openlayers地图
- 如何根据创建日期对对象进行排序,以插入Meteor的高图表
- Meteor:使用Jquery创建对话框
- Meteor:如何使用空格键创建包含两个集合数据的树列表
- 在Meteor中,我如何创建一个通用的事件处理程序
- 在Meteor中,我如何创建一个跨所有模板工作的通用事件处理程序
- 如何使用Meteor创建多页应用程序
- 如何在Meteor.js中使用车把创建网格系统
- 为Meteor数据创建编号列表
- 如何在 Meteor 的服务器上创建用户帐户后自动登录用户
- Meteor:为集合服务器端创建筛选器,并将其存储在本地集合中.好主意
- Meteor:当客户端使用 LinkedIn 登录时,首先进行身份验证时创建用户帐户
- Meteor Braintree -- 通过 Meteor 方法创建客户端令牌
- Meteor:使用ReactiveVar创建一个加载小部件,用于订阅用户集合
- 如何在Meteor中创建点击计数器(带数据库)
- 如何根据url在Meteor中创建集合的新副本
- 正在创建Meteor应用程序
- 防止在创建Meteor帐户时拒绝默认的重复电子邮件
- 创建Meteor包库
- 创建Meteor.Router.add()后显示[object object]的Meteor