MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose - RangeError:Maximale Call-Stack-Größe überschritten

Ich hatte das gleiche Problem und fing an, den Mongoose-Quellcode (Version 3.8.14) zu durchsuchen. Schließlich führte es mich zu dieser Zeile innerhalb von

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

Anscheinend ruft dies BSON.calculateObjectSize auf, das computeObjectSize aufruft, das dann unendlich rekursiv ist. Ich war nicht in der Lage, so weit in die Ursache einzudringen, dachte aber, dass es etwas mit den Mungo-Wrapper-Bindungsfunktionen an das Schema zu tun haben könnte. Da ich Rohdaten in MongoDB einfügte, verschwand das Problem, nachdem ich mich entschieden hatte, die Masseneinfügung in Mongoose in ein Standard-Javascript-Objekt zu ändern, und die Masseneinfügungen wurden korrekt durchgeführt. Möglicherweise können Sie etwas Ähnliches tun.

Im Wesentlichen ging mein Code von

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

zu

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