MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Inserto batch Mongoose (mongodb)?

Model.create() vs Model.collection.insert():un approccio più rapido

Model.create() è un brutto modo per fare inserti se hai a che fare con un ingombro molto grande. Sarà molto lento . In tal caso dovresti usare Model.collection.insert , che ha un rendimento molto migliore . A seconda delle dimensioni della massa, Model.create() andrà anche in crash! Provato con un milione di documenti, senza fortuna. Utilizzando Model.collection.insert ci sono voluti solo pochi secondi.

Model.collection.insert(docs, options, callback)
  • docs è l'array di documenti da inserire;
  • options è un oggetto di configurazione opzionale - vedere i documenti
  • callback(err, docs) verrà chiamato dopo che tutti i documenti sono stati salvati o si è verificato un errore. In caso di successo, documenti è l'array di documenti persistenti.

Come sottolinea l'autore di Mongoose qui, questo metodo ignorerà qualsiasi procedura di convalida e accederà direttamente al driver Mongo. È un compromesso che devi fare poiché stai gestendo una grande quantità di dati, altrimenti non saresti in grado di inserirli affatto nel tuo database (ricorda che qui stiamo parlando di centinaia di migliaia di documenti).

Un semplice esempio

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

Aggiornamento 22-06-2019 :sebbene insert() può ancora essere usato bene, è stato deprecato a favore di insertMany() . I parametri sono esattamente gli stessi, quindi puoi semplicemente usarlo come sostituto drop-in e tutto dovrebbe funzionare bene (beh, il valore restituito è un po' diverso, ma probabilmente non lo stai comunque usando).

Riferimento

  • Documentazione Mongo
  • Aaron Heckman su Google Gruppi per discutere di inserti collettivi