MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Търсене и замяна в Mongodb?

Не точно и с това имам предвид, ако не търсите „точния низ“ и искате винаги да заменяте със „същия“ различен низ.

По същество изглежда, че търсите "regex replace" за документи, които могат да бъдат изпълнени чрез .update() . Въпреки че е възможно да $regex търсене, няма „улавяне“ или опция за подаване на уловени части към частта „актуализация“ на израз като $set .

Така че, за да направите този вид актуализация, трябва да завъртите вашите документи и да промените кода. Но API за групови операции може да бъде от полза тук:

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

Така че това все още изисква зацикляне, но поне актуализациите се изпращат до сървъра само веднъж на всеки 1000 обработени документа.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Можете ли да използвате заявки за намиране на GridFS с помощта на API на javascript?

  2. Не може да се свърже Hive с MongoDB чрез mongo-hadoop конектор

  3. Свържете R към отдалечен mongoDB с rmongodb

  4. Заявка за друг модел в метод на екземпляр на различен модел

  5. Заявка и вмъкване с една команда