MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wyszukaj i zamień w Mongodb?

Nie do końca, mam na myśli to, że nie szukałeś „dokładnego ciągu” i chciałeś zawsze zastąpić go „tym samym” innym ciągiem.

Zasadniczo wygląda na to, że szukasz „zamiennika wyrażenia regularnego” dla dokumentów, które można wykonać za pomocą .update() . Chociaż możliwe jest $regex wyszukiwania, nie ma opcji „przechwytywania” ani opcji przesyłania przechwyconych części do części „aktualizacji” instrukcji, takiej jak $set .

Aby dokonać tego rodzaju aktualizacji, musisz zapętlić swoje dokumenty i zmodyfikować kod. Ale Interfejs API operacji zbiorczych może być tutaj pomocna:

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

Tak więc nadal wymaga to zapętlenia, ale przynajmniej aktualizacje są wysyłane na serwer tylko raz na 1000 przetworzonych dokumentów.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wybierz ostatnią wartość tablicy w poddokumencie

  2. Spring data mongodb, jak ustawić SSL?

  3. MongoDb wyłącza się z kodem 100

  4. Jak rozwiązać problem Nie udało się skonfigurować gniazd podczas uruchamiania, gdy uruchamiam serwer mongodb?

  5. Mapowanie właściwości bez rozróżniania wielkości liter