Я пытаюсь объединить вставки документов в MongoDB (поэтому в обход Mongoose и вместо этого использовать собственный драйвер, поскольку Mongoose не поддерживает массовую вставку массива документов). Причина, по которой я делаю это, - улучшить скорость написания.
Я получаю ошибку "RangeError: максимальный размер стека вызовов превышен" на 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/info/24356859/mongoose-maximum-call-stack-size-exceeded
Возможно, это что-то вроде формата массива ответов, который возвращает Mongoose, что означает, что я не могу напрямую вставить с помощью MongoDB изначально? Я пробовал.toJSON() для каждого ответа, но не повезло.
Я все еще получаю ошибку даже с очень небольшим количеством данных, но цикл и вызов Mongoose save на каждом документе индивидуально работает нормально.
EDIT: Я думаю, что это связано с этой проблемой: http://howtosjava.blogspot.com.au/2012/05/nodejs-mongoose-rangeerror-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]
});
Таким образом, ответы являются суб-документами в ответах. Не уверен, как это исправить, хотя....