sql >> Database teknologi >  >> NoSQL >> MongoDB

Søg og erstat i Mongodb?

Ikke ligefrem, og med det mener jeg, hvis du ikke ledte efter den "nøjagtige streng" og altid ville erstatte med den "samme" forskellige streng.

Grundlæggende ser det ud til, at du leder efter en "regex-erstatning" for dokumenter, der kan udføres via .update() . Selvom det er muligt at $regex søgning, er der ingen "capture" eller mulighed for at feed opfangede dele til "update"-delen af ​​en erklæring såsom $set .

Så for at lave denne form for opdatering skal du sløjfe dine dokumenter og ændre i kode. Men Bulk Operations API kan være til hjælp her:

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 stadig looping, men i det mindste sendes opdateringerne kun til serveren én gang for hver 1000 behandlede dokumenter.



  1. mongoDB-alternativer til fremmednøglebegrænsninger

  2. Meteor - Hvorfor skal jeg bruge this.userId over Meteor.userId() når det er muligt?

  3. MongoDB Kan ikke finde indgang ved at specificere ts.t(ts er en tidsstempeltype)

  4. Node-app reagerer ikke efter et vist tidsrum