// first approach
for (var i = 0; i < 1000000; i++) {
db.testdata.insert({number: i});
}
// second approach
for (var i = 0, arr = []; i < 1000000; i++) {
arr.push({number: i});
}
db.testdata.insert(arr);
哪种方式更有效?第二种方法是否向数据库发出单个请求?
答案 0 :(得分:2)
对于大量插入,肯定第二个会更快。这是因为您只会进行一次数据库调用。
但是自己测试它并不难。
var X = 100000;
var start = new Date();
for (var i = 0; i < X; i++) {
db.coll1.insert({number: i});
}
var time1 = new Date() - start;
第二个
var start = new Date();
for (var i = 0, arr = []; i < X; i++) {
arr.push({number: i});
}
db.coll2.insert(arr);
var time2 = new Date() - start;
正如评论中所建议的那样,您可以尝试bulk插入(我认为这与2相同,但我可能错了):
var start = new Date();
var bulk = db.coll3.initializeUnorderedBulkOp();
for (var i = 0; i < X; i++) {
bulk.insert({number: i});
}
bulk.execute();
var time3 = new Date() - start;
我的计算机time1 = 33846
,time2 = 2191
和time3 = 2203
的结果。
正如你所看到的,2和3之间的差异可以忽略不计,但是1几乎是15倍(如果你增加X则会更大)。如果我是你,我会使用有文件记录的批量插入。