gpt4 book ai didi

javascript - 使用 mongoose 在 MongoDB 中批量插入

转载 作者:IT老高 更新时间:2023-10-28 13:14:38 27 4
gpt4 key购买 nike

我目前在 Mongodb 中有一个集合说“Collection1”。我有以下需要插入 MongoDB 的对象数组。我正在使用 Mongoose API。现在,我正在遍历数组并将它们中的每一个插入到 mongo 中。这暂时可以,但是当数据太大时就会出现问题。我需要一种将数据批量插入 MongoDB 而不重复的方法。我不知道该怎么做。我在 Mongoose 中找不到批量选项。

下面是我的代码

myData = [Obj1,Obj2,Obj3.......]

myData.forEach(function(ele){
//console.log(ele)
saveToMongo(ele);
});
function saveToMongo(obj){
(new Collection1(obj)).save(function (err, response) {
if (err) {
// console.log('Error while inserting: ' + obj.name + " " +err);
} else {
// console.log('Data successfully inserted');
}
});

return Collection1(obj);
}

最佳答案

您可能想使用 insertMany()如果您使用的是最新的 Mongoose 版本 4.4.X 及更高版本,则此处使用 方法,它本质上使用 Model.collection.insertMany() 在后台,驱动程序可能会为您处理并行化 >= 1000 文档。

myData = [Obj1, Obj2, Obj3.......];
Collection1.insertMany(myData, function(error, docs) {});

或使用 Promises 更好地处理错误

Collection1.insertMany(myData)
.then(function(docs) {
// do something with docs
})
.catch(function(err) {
// error handling here
});

它的工作原理是创建一堆文档,在它们上并行调用 .validate(),然后调用底层驱动的 insertMany() 关于每个文档的 toObject({ virtuals: false }); 的结果。虽然 insertMany() 不会触发预保存 Hook ,它具有更好的性能,因为它只对服务器进行 1 次往返,而不是每个文档 1 次。


对于支持 MongoDB Server >=2.6.x 的 Mongoose 版本 ~3.8.8、~3.8.22、4.x,您可以使用 Bulk API 如下

var bulk = Collection1.collection.initializeOrderedBulkOp(),
counter = 0;

myData.forEach(function(doc) {
bulk.insert(doc);

counter++;
if (counter % 500 == 0) {
bulk.execute(function(err, r) {
// do something with the result
bulk = Collection1.collection.initializeOrderedBulkOp();
counter = 0;
});
}
});

// Catch any docs in the queue under or over the 500's
if (counter > 0) {
bulk.execute(function(err,result) {
// do something with the result here
});
}

关于javascript - 使用 mongoose 在 MongoDB 中批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37379180/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com