MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose - RangeError:tamanho máximo da pilha de chamadas excedido


Eu estava tendo esse mesmo problema e comecei a pesquisar o código-fonte do mangusto (versão 3.8.14). Eventualmente, isso me levou a esta linha dentro
  • mongoose/node_modules/mongodb/lib/mongodb/collection/core.js -> inserir (...) -> insertWithWriteCommands (...) ->

  • mongoose/node_modules/mongodb/lib/mongodb/collection/batch/ordered.js -> bulk.insert(docs[i]) -> addToOperationsList(...) -> bson.calculateObjectSize(document, false);

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

Aparentemente, isso chama BSON.calculateObjectSize, que chama calculateObjectSize, que se repete infinitamente. Não consegui me aprofundar tanto no que causou isso, mas percebi que pode ter algo a ver com as funções de ligação do wrapper do mangusto ao Schema. Como eu estava inserindo dados brutos no mongoDB, uma vez que decidi alterar a inserção em massa no mongoose para um objeto javascript padrão, o problema desapareceu e as inserções em massa aconteceram corretamente. Você pode ser capaz de fazer algo semelhante.

Essencialmente, meu código passou 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) {});

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