Node.js 无法在monogDB中使用insertMany插入10000条记录
所以实际上我制作了一个脚本,在一个文档中插入10000多条记录。因此,我所做的是,首先使用insertMany查询将10000条记录插入到我的集合中。但是当我再次尝试插入相同数量的记录时,它没有被插入到我的文档中。然后我尝试了5000条记录,但这些记录也没有被插入 那么这里的问题是什么?MongoDB对记录有限制吗?请帮我做这个 这是我的剧本:Node.js 无法在monogDB中使用insertMany插入10000条记录,node.js,mongodb,Node.js,Mongodb,所以实际上我制作了一个脚本,在一个文档中插入10000多条记录。因此,我所做的是,首先使用insertMany查询将10000条记录插入到我的集合中。但是当我再次尝试插入相同数量的记录时,它没有被插入到我的文档中。然后我尝试了5000条记录,但这些记录也没有被插入 那么这里的问题是什么?MongoDB对记录有限制吗?请帮我做这个 这是我的剧本: var resultArr=[]; var getUID = function () { return (((1 + Math.r
var resultArr=[];
var getUID = function () {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
var date = new Date();
date.setDate(date.getDate() + 12);
for(var i=0;i<10000;i++){
resultObj = {
"guid" : (getUID() + getUID() + "-" + getUID() + "-4" + getUID().substr(0, 3) + "-" + getUID()),
title: 'something'
}
resultArr.push(resultObj);
resultObj={};
}
db.getCollection('5891847dc654e8e2150b3bff').insertMany(resultArr, function (err, result) {
print('data saved')
if (err) {
deferred.reject(err)
db.close()
};
});
var resultar=[];
var getUID=函数(){
返回((1+Math.random())*0x10000)| 0.toString(16)子字符串(1);
}
变量日期=新日期();
date.setDate(date.getDate()+12);
对于(var i=0;i使用以下代码:
var async = require('async');
var resultArr = [];
var getUID = function () {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
var date = new Date();
date.setDate(date.getDate() + 12);
var count = 0;
async.whilst(
// Check to see if we continue
function() { return count < 10000 },
// The loop function
function(callback) {
count++;
resultArr.push({
"guid" : (getUID() + getUID() + "-" + getUID() + "-4" + getUID().substr(0, 3) + "-" + getUID()),
"title": "something"
});
if ( resultArray.length >= 1000 ) {
db.getCollection('5891847dc654e8e2150b3bff').bulkWrite(
resultArray.map(function(d) {
return { "insertOne": { "document": d } }
}),
function(err,res) {
resultArray = [];
callback(err);
}
);
} else {
callback()
}
},
// This is on completion or error
function(err, n) {
if (err) throw err;
if ( resultArray.length > 0 ) {
db.getCollection('5891847dc654e8e2150b3bff').bulkWrite(
resultArray.map(function(d) { return {
"insertOne": { "document": d }
}),
function(err,res) {
resultArray = [];
db.close();
}
);
} else {
db.close();
}
}
);
var async=require('async');
var resultar=[];
var getUID=函数(){
返回((1+Math.random())*0x10000)| 0.toString(16)子字符串(1);
}
变量日期=新日期();
date.setDate(date.getDate()+12);
var计数=0;
异步的(
//检查我们是否继续
函数(){返回计数<10000},
//循环函数
函数(回调){
计数++;
结果推({
“guid”:(getUID()+getUID()+“-”+getUID()+“-4”+getUID().substr(0,3)+“-”+getUID()),
“标题”:“某物”
});
如果(resultArray.length>=1000){
db.getCollection('5891847dc654e8e2150b3bff').bulkWrite(
resultArray.map(函数(d){
返回{“insertOne”:{“document”:d}
}),
函数(err、res){
结果射线=[];
回调(err);
}
);
}否则{
回调函数()
}
},
//这是在完成或出错时进行的
函数(err,n){
如果(错误)抛出错误;
如果(resultArray.length>0){
db.getCollection('5891847dc654e8e2150b3bff').bulkWrite(
map(函数(d){return{
“insertOne”:{“document”:d}
}),
函数(err、res){
结果射线=[];
db.close();
}
);
}否则{
db.close();
}
}
);
这将使用内部异步调用上的流控制拆分循环。这将提供要调用的回调
,以便继续“循环”,从而不会在节点上使用并发运行操作炸毁调用堆栈
当数组中的项目数量达到1000时,实际调用将在循环中进行,这是驱动程序一次发送的最大值。您可以进行更多调用,但我们正在节省内存,这是关于“最佳点”
在这里使用回调,我们清除数组并调用“循环的回调”,以允许循环继续
最后,当“循环”完成时,你会“典型地进行检查,看看在偶数为1000的情况下是否有未处理的内容。在这种情况下,我们知道这是一个整数,但我留下它是为了显示如何处理一个真正的列表
因此,该部分位于async的最后一个回调参数中。而在循环完成时满足,我们可以实际退出。Define“未插入"。这到底是什么意思?它只是默默地失败了,或者你得到了某种错误?不,没有错误。我只能插入100条记录,插入许多后记。你不需要使用底层,甚至可以将其分解为1000个批次。因为底层驱动程序无论如何都会这样做。如果你加载10000个文档ts到内存并尝试运行insert,那么您还有其他问题要处理。无论如何,除非您显示代码,否则我们无法真正解决您的问题。即使这样,也有16MB BSON限制,因为“insert”操作或任何操作实际上是“单个BSON文档”那么你也有这个限制。你需要做一些更聪明的事情,而不是简单地在一堆数据中咕噜咕噜咕噜地输入,然后期望将数据扔向数据库。是的,你是对的。但我甚至不能在插入10000条记录之后再插入1000条记录。