MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Suchen und Ersetzen in Mongodb?

Nicht genau, und damit meine ich, wenn Sie nicht nach der "exakten Zeichenfolge" suchen und immer durch die "gleiche" andere Zeichenfolge ersetzen möchten.

Im Wesentlichen sieht es so aus, als ob Sie nach einem "Regex-Ersatz" für Dokumente suchen, der über .update() ausgeführt werden kann . Es ist zwar möglich, $regex suchen, gibt es kein „Capture“ oder die Option, erfasste Teile in den „Update“-Teil einer Anweisung wie $set .

Um diese Art von Aktualisierung durchzuführen, müssen Sie also Ihre Dokumente durchlaufen und im Code ändern. Aber die Bulk Operations API kann hier behilflich sein:

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

Das erfordert also immer noch eine Schleife, aber zumindest werden die Aktualisierungen nur einmal alle 1000 verarbeiteten Dokumente an den Server gesendet.