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

Dávková vložka Mongoose (mongodb)?

Model.create() vs. Model.collection.insert():rychlejší přístup

Model.create() je špatný způsob, jak dělat vložky, pokud máte co do činění s velmi velkým objemem. Bude to velmi pomalé . V takovém případě byste měli použít Model.collection.insert , která funguje mnohem lépe . V závislosti na velikosti hromadného souboru Model.create() dokonce havaruje! Vyzkoušeno s milionem dokumentů, bez úspěchu. Pomocí Model.collection.insert trvalo to jen pár sekund.

Model.collection.insert(docs, options, callback)
  • docs je pole dokumentů, které mají být vloženy;
  • options je volitelný konfigurační objekt – viz docs
  • callback(err, docs) bude voláno po uložení všech dokumentů nebo po chybě. V případě úspěchu jsou dokumenty polem trvalých dokumentů.

Jak zde autor Mongoose zdůrazňuje, tato metoda obejde veškeré ověřovací procedury a přistoupí přímo k ovladači Mongo. Je to kompromis, který musíte udělat, protože nakládáte s velkým množstvím dat, jinak byste je vůbec nemohli vložit do databáze (nezapomeňte, že zde mluvíme o stovkách tisíc dokumentů).

Jednoduchý příklad

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

Aktualizace 22. 6. 2019 :ačkoli insert() lze stále dobře používat, byla zastaralá ve prospěch insertMany() . Parametry jsou úplně stejné, takže to můžete použít jen jako náhradu za drop-in a vše by mělo fungovat v pořádku (no, návratová hodnota je trochu jiná, ale stejně ji pravděpodobně nepoužíváte).

Reference

  • Dokumentace Mongo
  • Aaron Heckman ve Skupinách Google diskutuje o hromadných vkládáních


  1. Redis Expire nefunguje

  2. Mongodb:Dotaz na objekt json vnořený do pole

  3. Ruby - mutex založený na Redis s implementací expirace

  4. Bitva o databáze NoSQL - Porovnání MongoDB a CouchDB