sql >> Database >  >> NoSQL >> MongoDB

Mongoose (mongodb) batch-insert?

Model.create() vs Model.collection.insert():een snellere aanpak

Model.create() is een slechte manier om inserts te doen als je te maken hebt met een zeer grote bulk. Het zal erg langzaam zijn . Gebruik in dat geval Model.collection.insert , die veel beter presteert . Afhankelijk van de grootte van de bulk, Model.create() zal zelfs crashen! Geprobeerd met een miljoen documenten, geen geluk. Model.collection.insert gebruiken het duurde maar een paar seconden.

Model.collection.insert(docs, options, callback)
  • docs is de reeks documenten die moet worden ingevoegd;
  • options is een optioneel configuratie-object - zie de documenten
  • callback(err, docs) wordt aangeroepen nadat alle documenten zijn opgeslagen of er treedt een fout op. Bij succes, docs is de reeks van persistente documenten.

Zoals de auteur van Mongoose hier aangeeft, zal deze methode alle validatieprocedures omzeilen en rechtstreeks toegang krijgen tot de Mongo-driver. Het is een afweging die je moet maken omdat je een grote hoeveelheid gegevens verwerkt, anders zou je het helemaal niet in je database kunnen invoegen (onthoud dat we het hier over honderdduizenden documenten hebben).

Een eenvoudig voorbeeld

var Potato = mongoose.model('Potato', PotatoSchema);

var potatoBag = [/* a humongous amount of potato objects */];

Potato.collection.insert(potatoBag, onInsert);

function onInsert(err, docs) {
    if (err) {
        // TODO: handle error
    } else {
        console.info('%d potatoes were successfully stored.', docs.length);
    }
}

Update 22-06-2019 :hoewel insert() kan nog steeds prima worden gebruikt, het is afgeschaft ten gunste van insertMany() . De parameters zijn precies hetzelfde, dus je kunt het gewoon gebruiken als een drop-in vervanging en alles zou prima moeten werken (nou ja, de retourwaarde is een beetje anders, maar je gebruikt het waarschijnlijk toch niet).

Referentie

  • Mongo-documentatie
  • Aaron Heckman op Google Discussiegroepen over bulkinvoegingen


  1. MongoDB - Equivalent van LEFT JOIN waar één verzameling niet bestaat

  2. Hoe de console in MongoDB te wissen

  3. Wat is de standaard sessietime-out en hoe deze te configureren bij gebruik van de Spring Session met Redis als backend

  4. Redis:Race Conditie en Single threaded