MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose - RangeError:superata la dimensione massima dello stack di chiamate

Stavo riscontrando lo stesso problema e ho iniziato a scavare nel codice sorgente di Mongoose (versione 3.8.14). Alla fine mi ha portato a questa linea all'interno di

  • mongoose/node_modules/mongodb/lib/mongodb/collection/core.js -> inserire (...) -> 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);

Apparentemente, questo chiama BSON.calculateObjectSize, che chiama calcolareObjectSize che quindi ricorre all'infinito. Non sono stato in grado di approfondire ciò che lo ha causato, ma ho pensato che potesse avere qualcosa a che fare con le funzioni di associazione del wrapper mongoose allo Schema. Dato che stavo inserendo dati grezzi in mongoDB, una volta deciso di modificare l'inserimento di massa in mongoose in un oggetto javascript standard, il problema è scomparso e gli inserimenti di massa si sono verificati correttamente. Potresti riuscire a fare qualcosa di simile.

In sostanza, il mio codice è andato da

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