sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose - RangeError:Maximal anropsstapelstorlek har överskridits

Jag hade samma problem och jag började gräva igenom mongoose-källkoden (version 3.8.14). Så småningom ledde det mig till denna linje inom

  • mongoose/node_modules/mongodb/lib/mongodb/collection/core.js -> infoga (...) -> insertWithWriteCommands (...) ->
  • mongoose/node_modules/mongodb/lib/mongodb/collection/batch/ordered.js -> bulk.insert(docs[i]) -> addToOperationsList(...) -> bson.calculateObjectSize(dokument, falskt);

    var bsonSize =bson.calculateObjectSize(dokument, falskt);

Tydligen anropar detta BSON.calculateObjectSize, som anropar calculateObjectSize som sedan återkommer oändligt. Jag kunde inte gräva så långt in i vad som orsakade det, men tänkte att det kan ha något att göra med mongoose-omslagets bindningsfunktioner till schemat. Eftersom jag infogade rådata i mongoDB, när jag väl bestämde mig för att ändra bulkinsert i mongoose till ett standard javascript-objekt, försvann problemet och bulkinserts skedde korrekt. Du kanske kan göra något liknande.

I huvudsak gick min kod från

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

till

//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. ruby resque utan lastskenor miljö

  2. Redis Vue Desktop

  3. Mongoose duplicate key error med upsert

  4. Hur kan jag använda LIKE-operatorn på mongoose?