MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wstawka partii Mongoose (mongodb)?

Model.create() vs Model.collection.insert():szybsze podejście

Model.create() to zły sposób na wkładki, jeśli masz do czynienia z bardzo dużą ilością. Będzie bardzo wolno . W takim przypadku powinieneś użyć Model.collection.insert , który działa znacznie lepiej . W zależności od rozmiaru zbiorczego, Model.create() nawet się rozbije! Próbowałem z milionem dokumentów, bez powodzenia. Korzystanie z Model.collection.insert zajęło to tylko kilka sekund.

Model.collection.insert(docs, options, callback)
  • docs to tablica dokumentów do wstawienia;
  • options jest opcjonalnym obiektem konfiguracyjnym - zobacz dokumentację
  • callback(err, docs) zostanie wywołany po zapisaniu wszystkich dokumentów lub wystąpieniu błędu. W przypadku sukcesu, docs jest zbiorem utrwalonych dokumentów.

Jak wskazuje tutaj autor Mongoose, ta metoda ominie wszelkie procedury sprawdzania poprawności i uzyska bezpośredni dostęp do sterownika Mongo. Jest to kompromis, który musisz zrobić, ponieważ obsługujesz dużą ilość danych, w przeciwnym razie w ogóle nie będziesz w stanie wstawić ich do bazy danych (pamiętaj, że mówimy tutaj o setkach tysięcy dokumentów).

Prosty przykład

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

Aktualizacja 22.06.2019 :chociaż insert() nadal może być dobrze używany, został przestarzały na rzecz insertMany() . Parametry są dokładnie takie same, więc możesz po prostu użyć go jako zamiennika i wszystko powinno działać dobrze (no cóż, wartość zwracana jest nieco inna, ale prawdopodobnie i tak jej nie używasz).

Odniesienie

  • Dokumentacja Mongo
  • Aaron Heckman w Grupach dyskusyjnych Google omawia wstawianie zbiorcze


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Repozytoria Spring Data Reactive z MongoDB

  2. Jak zarządzać dokumentami w MongoDB

  3. Mongoose:jakie są różnice między Model.create i Collection.insert

  4. MongoDB $weeklyUpdate #65 (15 kwietnia 2022):GDELT, Mongoose i czas na Hackathon!

  5. Aktualizacja dużej liczby rekordów w kolekcji