sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose - RangeError:Maximální velikost zásobníku hovorů překročena

Měl jsem stejný problém a začal jsem se prohrabovat zdrojovým kódem mongoose (verze 3.8.14). Nakonec mě to přivedlo k této linii v rámci

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

Zdá se, že to volá BSON.calculateObjectSize, které volá countObjectSize, což se pak nekonečně opakuje. Nebyl jsem schopen zapátrat tak daleko v tom, co to způsobilo, ale napadlo mě, že to může mít něco společného s funkcemi vazby mangoose wrapper na schéma. Protože jsem do mongoDB vkládal nezpracovaná data, jakmile jsem se rozhodl změnit hromadné vkládání v mongoose na standardní objekt javascript, problém zmizel a hromadné vkládání proběhlo správně. Možná byste mohli udělat něco podobného.

Můj kód v podstatě pochází z

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

do

//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. Jak pokračovat ve vkládání po chybě duplicitního klíče pomocí PyMongo

  2. Musím výslovně ukončit připojení?

  3. Má master vždy redis instance s nejmenší prioritou?

  4. Jakmile budete hotovi, řádně uzavřete spojení mangusty