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

Hledat a nahradit v Mongodb?

Ne přesně, a tím myslím, pokud jste nehledali "přesný řetězec" a chtěli ho vždy nahradit "stejným" jiným řetězcem.

V podstatě to vypadá, že hledáte "nahrazení regulárního výrazu" pro dokumenty, které lze provést pomocí .update() . I když je možné $regex vyhledávání, neexistuje žádné „zachycení“ nebo možnost vložit zachycené části do části „aktualizace“ prohlášení, jako je $set .

Chcete-li tedy provést tento druh aktualizace, musíte zacyklit své dokumenty a upravit kód. Ale Bulk Operations API může vám pomoci zde:

var bulk = db.collection.initializeOrderedBulkOp();
var counter = 0;

var query = { "url": { "$regex": "^http://example\.com" }};
db.collection.find(query).forEach(function(doc) {

    // Inspect and replace the part of the string
    bulk.find({ "_id": doc._id }).updateOne(
        { "$set": { "url": doc.url.replace("example.com","bucket.aws.com") } }
    );
    counter++;

    // Update once every 1000 documents
    if ( counter % 1000 == 0 ) {
        bulk.execute();
        bulk = db.collection.initializeOrderedBulkOp();
    }

})

// Process any remaining
if ( counter % 1000 != 0 )
    bulk.execute();

Stále to tedy vyžaduje smyčkování, ale alespoň aktualizace se na server odesílají pouze jednou za každých 1000 zpracovaných dokumentů.



  1. mongodb update matched doc fail

  2. Výpis poslední zprávy každé konverzace zahrnující uživatele v MongoDB

  3. Redis, Node.js a Socket.io:Ověřování napříč servery a porozumění node.js

  4. Jak se dotazovat na dokumenty pomocí pole _id v ovladači Java mongodb?