sql >> Database >  >> NoSQL >> MongoDB

Mongoose - RangeError:maximale call-stackgrootte overschreden

Ik had hetzelfde probleem en ik begon de broncode van mangoesten door te spitten (versie 3.8.14). Uiteindelijk leidde het me naar deze regel binnen

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

Blijkbaar roept dit BSON.calculateObjectSize aan, die calculatorObjectSize aanroept, die vervolgens oneindig terugkeert. Ik kon niet zo ver graven in wat de oorzaak was, maar dacht dat het misschien iets te maken had met de bindingsfuncties van de mangoestwikkel aan het schema. Omdat ik onbewerkte gegevens in mongoDB aan het invoegen was, toen ik besloot om de bulk-insert in mongoose te veranderen in een standaard javascript-object, verdween het probleem en werden bulk-inserts correct uitgevoerd. Misschien kun je iets soortgelijks doen.

In wezen ging mijn code van

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

naar

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


  1. MongoDB $verdelen

  2. MongoDB $bsonSize

  3. Spring Session Data Redis - Krijg geldige sessies, huidige gebruiker van Redis Store

  4. MongoDB 2.4.1 is nu beschikbaar op ScaleGrid