sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose - RangeError:se excedió el tamaño máximo de la pila de llamadas

Estaba teniendo este mismo problema y comencé a buscar en el código fuente de mangosta (versión 3.8.14). Eventualmente me llevó a esta línea dentro de

  • mangoose/node_modules/mongodb/lib/mongodb/collection/core.js -> insertar (...) -> insertar con comandos de escritura (...) ->
  • mongoose/node_modules/mongodb/lib/mongodb/collection/batch/ordered.js -> bulk.insert(docs[i]) -> añadir a la lista de operaciones(...) -> bson.calculateObjectSize(document, false);

    var bsonSize =bson.calculateObjectSize(document, false);

Aparentemente, esto llama a BSON.calculateObjectSize, que llama a computeObjectSize, que luego recurre infinitamente. No pude profundizar tanto en lo que lo causó, pero pensé que podría tener algo que ver con las funciones de vinculación del contenedor de mangosta al esquema. Como estaba insertando datos sin procesar en mongoDB, una vez que decidí cambiar la inserción masiva en mongoose a un objeto javascript estándar, el problema desapareció y las inserciones masivas se realizaron correctamente. Es posible que puedas hacer algo similar.

Esencialmente, mi código pasó de

//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) {});

a

//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) {});