一尘不染

在流星或节点中批量插入mongodb

node.js

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在下一个版本中支持此功能?


阅读 199

收藏
2020-07-07

共1个答案

一尘不染

您可以使用exec(nodejs
docs
Meteor.startup在服务器上的流星内部运行mongo脚本。

例:

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。可能看起来像这样:

Meteor.startup(function () {
    var exec = Npm.require('child_process').exec;
    exec('mongo localhost:27017/meteor --eval \'db.Orders.insert(' + JSON.stringify(arrOfOrders) + ')\'', function ( ) {
       // done
    });        
});
2020-07-07