sql >> Databasteknik >  >> NoSQL >> MongoDB

Sök och ersätt i Mongodb?

Inte exakt, och då menar jag om du inte letade efter den "exakta strängen" och alltid ville ersätta med "samma" olika sträng.

I grund och botten ser det ut som att du letar efter en "regex-ersättning" för dokument som kan utföras via .update() . Även om det är möjligt att $regex sökning, det finns ingen "capture" eller möjlighet att mata in fångade delar till "update"-delen av ett uttalande som $set .

Så för att göra den här typen av uppdatering måste du loopa dina dokument och ändra i kod. Men Bulk Operations API kan vara till hjälp här:

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

Så det kräver fortfarande looping men åtminstone uppdateringarna skickas bara till servern en gång var 1000:e bearbetade dokument.



  1. MongoRepository JSON-datumfråga (vår)

  2. Hur gör jag en sökfråga i Mongoose?

  3. Hur utesluter man ett visst fält från en samling i Mongoose?

  4. Det går inte att skriva över "users"-modellen när noden js har kompilerats