MongoDB支持批量插入http://docs.mongodb.org/manual/core/bulk- inserts/
我已经在流星收藏中尝试过:
Orders.insert([ { "cust_id" : "A123", "amount" : 500, "status" : "A", "_id" : "iZXL7ewBDALpic8Fj" }, { "cust_id" : "A123", "amount" : 250, "status" : "A", "_id" : "zNrdBAxxeNZQ2yrL9" }, { "cust_id" : "B212", "amount" : 200, "status" : "A", "_id" : "vev3pjJ8cmiDHHxe4" }, { "cust_id" : "A123", "amount" : 300, "status" : "D", "_id" : "BBLngRhS76DgeHJQJ" } ]);
但是它创造了
{ "0" : { "cust_id" : "A123", "amount" : 500, "status" : "A", "_id" : "iZXL7ewBDALpic8Fj"}, "1" : { "cust_id" : "A123", "amount" : 250, "status" : "A", "_id" : "zNrdBAxxeNZQ2yrL9" }, "2" : { "cust_id" : "B212", "amount" : 200, "status" : "A", "_id" : "vev3pjJ8cmiDHHxe4" }, "3" : { "cust_id" : "A123", "amount" : 300, "status" : "D", "_id" : "BBLngRhS76DgeHJQJ" }, "_id" : "6zWayeGtQCdfS65Tz" }
我需要它来进行性能测试。我需要用数千个测试项目填充和测试数据库。我确实在foreach中进行了插入,但是填充数据库所需的时间太长。
这里有什么解决方法吗?还是可以期望Meteor在下一个版本中支持此功能?
您可以使用exec(nodejs docs)Meteor.startup在服务器上的流星内部运行mongo脚本。
Meteor.startup
例:
Meteor.startup(function () { var exec = Npm.require('child_process').exec; exec('mongo localhost:27017/meteor path-to/my-insert-script.js', function ( ) { // done }); });
不是最佳选择,但我认为这是您目前最好的选择。您还可以--eval在exec中对Mongo 使用命令行选项,并将insert语句作为字符串传递给exec。可能看起来像这样:
--eval
Meteor.startup(function () { var exec = Npm.require('child_process').exec; exec('mongo localhost:27017/meteor --eval \'db.Orders.insert(' + JSON.stringify(arrOfOrders) + ')\'', function ( ) { // done }); });