Model.create() vs Model.collection.insert():en hurtigere tilgang
Model.create()
er en dårlig måde at lave indsatser på, hvis du har at gøre med en meget stor bulk. Det vil være meget langsomt . I så fald skal du bruge Model.collection.insert
, som klarer sig meget bedre . Afhængigt af størrelsen af massen, Model.create()
vil endda gå ned! Forsøgt med en million dokumenter, uden held. Brug af Model.collection.insert
det tog kun et par sekunder.
Model.collection.insert(docs, options, callback)
docs
er rækken af dokumenter, der skal indsættes;options
er et valgfrit konfigurationsobjekt - se dokumenternecallback(err, docs)
vil blive kaldt, når alle dokumenter er blevet gemt, eller der opstår en fejl. Hvad angår succes, er docs rækken af vedvarende dokumenter.
Som Mongooses forfatter påpeger her, vil denne metode omgå alle valideringsprocedurer og få direkte adgang til Mongo-driveren. Det er en afvejning, du skal lave, da du håndterer en stor mængde data, ellers ville du slet ikke være i stand til at indsætte det i din database (husk, vi taler om hundredtusindvis af dokumenter her).
Et simpelt eksempel
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);
}
}
Opdatering 2019-06-22 :selvom insert()
kan stadig bruges fint, det er blevet forældet til fordel for insertMany()
. Parametrene er nøjagtig de samme, så du kan bare bruge det som en drop-in erstatning, og alt skulle fungere fint (nå, returværdien er lidt anderledes, men du bruger den nok ikke alligevel).
Reference
- Mongo-dokumentation
- Aaron Heckman på Google Groups diskuterer masseindlæg