我正在尝试将文档批量插入MongoDB(因此绕过Mongoose并使用本机驱动程序,因为Mongoose不支持批量插入文档数组)。我这样做的原因是为了提高写作速度。
我收到错误RangeError: Maximum Call Stack Size Exceeded在console.log(err)在下面的代码:
function _fillResponses(globalSurvey, optionsToSelectRegular, optionsToSelectPiped, responseIds, callback) {
Response.find({'_id': {$in: responseIds}}).exec(function(err, responses) {
if (err) { return callback(err); }
if (globalSurvey.questions.length) {
responses.forEach(function(response) {
console.log("Filling response: " + response._id);
response.answers = [];
globalAnswers = {};
globalSurvey.questions.forEach(function(question) {
ans = _getAnswer(question, optionsToSelectRegular, optionsToSelectPiped, response);
globalAnswers[question._id] = ans;
response.answers.push(ans);
});
});
Response.collection.insert(responses, function(err, responsesResult) {
console.log(err);
callback()
});
} else {
callback();
}
});
}
类似于:https://stackoverflow.com/questions/24356859/mongoose-maximum-call-stack-size-exceeded
也许是因为Mongoose返回的响应数组的格式,这意味着我不能直接使用MongoDB本地插入?我在每个响应上都尝试了.toJSON(),但没有成功。
即使数据量非常少,我仍然会收到错误,但循环并单独调用每个文档的Mongoose保存可以正常工作。
编辑:我觉得和这个问题有关:http://howtosjava . blogspot . com . au/2012/05/nodejs-mongose-range error-maximum-call . html
我的响应模式是:
var ResponseSchema = new Schema({
user: {
type: Schema.ObjectId,
ref: 'User'
},
randomUUID: String,
status: String,
submitted: Date,
initialEmailId: String,
survey: String,
answers: [AnswerSchema]
});
因此,答案是响应中的子文档。但不知道如何修复。。。。
伙计们!我今天遇到了那个奇怪的错误。它的发生是因为我有一个带有ref
属性的Schema,并试图传入create
/update
整个相关文档。我已经将参数更改为仅_id
,这就成功了。像魅力一样工作。我在这里找到了答案(向下滚动到2013年2月21日,晚上8:05 gustavohenke
评论)。
已确认,但不是错误。Model.collection.insert()
绕过了猫鼬,因此您告诉节点驱动程序插入一个包含猫鼬内部结构的对象,如$__
等。堆栈溢出可能是因为bson试图计算间接引用自身的对象的大小。
长话短说,使用Document.toObject()
,这就是它的用途:http://mongoosejs.com/docs/api.html#document_Document-toObject
Response.find({}).exec(function(err, responses) {
if (err) {
return callback(err);
}
if (true) {
var toInsert = [];
responses.forEach(function(response) {
console.log("Filling response: " + response._id);
response.answers = [];
[{ name: 'test' }].forEach(function(ans) {
response.answers.push(ans);
});
toInsert.push(response.toObject());
});
Response.collection.insert(toInsert, function(err, responsesResult) {
console.log(err);
});
} else {
callback();
}
});
此外,即使您修复了堆栈溢出,您指定的代码也不会工作。由于您试图< code>insert()数据库中已经存在的文档,所有的插入都将由于< code>_id冲突而失败。如果只是使用stream()一次读取一个结果,然后< code>save()将它们保存回数据库,效果会好得多。
我也遇到了同样的问题,我开始挖掘mongoose源代码(版本3.8.14)。最终它引导我找到了内心的这条线
>
变量 bsonSize = bson.calculate对象大小(文档,假);
显然,这调用了 BSON.calculate 对象大小,它调用计算对象大小,然后无限递归。我无法深入挖掘导致它的原因,但认为它可能与猫鼬包装器将函数绑定到架构有关。由于我将原始数据插入mongoDB,一旦我决定将猫鼬中的大容量插入更改为标准的html" target="_blank">javascript对象,问题就消失了,并且大容量插入正确发生。你也许可以做类似的事情。
本质上,我的代码从
//EDIT: mongoose.model needs lowercase 'm' for getter method
var myModel = mongoose.model('MyCollection');
var toInsert = myModel();
var array = [toInsert];
myModel.collection.insert(array, {}, function(err, docs) {});
到
//EDIT: mongoose.model needs lowercase 'm' for getter method
var myModel = mongoose.model('MyCollection');
var toInsert = { //stuff in here
name: 'john',
date: new Date()
};
var array = [toInsert];
myModel.collection.insert(array, {}, function(err, docs) {});
问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:
这是我在React中的第一个应用程序。在localhost中,一切正常,当我使用Github Pages部署时,我的应用程序(Info/Images/evenements)中的一些页面无法呈现。每次单击他们的链接访问他们时,我都会在控制台上看到一个白色页面和此错误: range error:object . tostring处超出了最大调用堆栈大小 同样,当我刷新页面时,github pages返
我将redux添加到我的项目中进行状态管理,在添加reducer之前一切都很好 我认为每个中间件功能的下一步(操作)都会导致问题,但我不知道如何修复它。 我使用的是React 17.0.2,React redux 7.2.3,redux 4.1.2。 动作-- 中间件-- 中间件-- 减速机 -- 商店.js:
如果我逃跑 在铬33上,我得到 为什么?
问题内容: 我试图将文档批量插入MongoDB中(因此绕过Mongoose并使用本机驱动程序,因为Mongoose不支持批量插入文档数组)。我这样做的原因是为了提高写作速度。 我在以下代码中的console.log(err)处收到错误“ RangeError:超出最大调用堆栈大小”: 也许与Mongoose返回的响应数组的格式有关,这意味着我不能直接使用MongoDB进行本机插入吗?我已经在每个响
当我为图表(react-chartjs-2)获取数据时,我收到了这个错误。我实现了try/catch块,但不知道如何删除这个错误。在Edge浏览器上,我得到了CRIPT28:SCRIPT28:堆栈空间不足 这是我在组件中调用的操作。 这是连接到redux存储的组件。它在我看来一切都很好。