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

Jak používat neuspořádané hromadné vkládání s Mongoskin?

Můžete to udělat, ale musíte změnit své konvence volání, abyste to udělali, protože pouze formulář "zpětného volání" ve skutečnosti vrátí objekt kolekce, ze kterého .initializeUnorderedBulkOp() lze volat metodu. Existují také určité rozdíly v používání v tom, jak si myslíte, že to funguje:

var dbURI = urigoeshere;
var db = mongo.db(dbURI, {safe:true});
db.collection('collection',function(err,collection) {
    var bulk = collection.initializeUnorderedBulkOp();
    count = 0;

    for (var i = 0; i < 200000; i++) {
        bulk.insert({number: i});
        count++;

        if ( count % 1000 == 0 )
            bulk.execute(function(err,result) {
               // maybe do something with results
               bulk = collection.initializeUnorderedBulkOp(); // reset after execute
            });      

    });

    // If your loop was not a round divisor of 1000
    if ( count % 1000 != 0 )
        bulk.execute(function(err,result) {
          // maybe do something here
        });
});

Samotné „hromadné“ metody tedy nevyžadují zpětná volání a fungují přesně tak, jak je uvedeno v dokumentaci. Výjimka je .execute() který ve skutečnosti odesílá výpisy na server.

I když to za vás trochu vyřeší ovladač, pravděpodobně není dobrý nápad řadit do fronty příliš mnoho operací, než zavoláte příkaz execute. To se v podstatě hromadí v paměti, a přestože ovladač bude posílat pouze dávky po 1000 najednou (toto je limit serveru a celá dávka je menší než 16 MB), pravděpodobně zde budete chtít trochu více kontroly, alespoň omezit využití paměti.

To je smysl modulo testů, jak je ukázáno, ale pokud pro vás paměť pro vytváření operací a možná opravdu velký objekt odezvy nejsou problémem, můžete jednoduše zařazovat operace do fronty a volat .execute() jednou.

"Odpověď" je ve stejném formátu, jaký je uveden v dokumentaci k BulkWriteResult.




  1. Jak mohu získat počet klíčů v redis?

  2. Upsert Array Elements vyhovující kritériím v dokumentu MongoDB?

  3. Ovladač mongodb 3.x kompatibilní se systémem Android

  4. Ukládejte obrázky do databáze MongoDB