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

Znajdź i zamień ciągi w efektywny sposób

Z pewnością, jeśli wszystko, co chcesz zrobić, to usunąć   elementy z tekstu, po prostu dopasuj globalnie i zamień:

db.tests.find({ "name": /\ /g }).forEach(function(doc) {
    doc.name = doc.name.replace(/ /g,"");
    db.tests.update({ "_id": doc._id },{ "$set": { "name": doc.name } });
});

Więc nie powinno być potrzeby zapisywania każdej kombinacji, wyrażenie regularne zastąpi bardzo dopasowanie /g opcja. Ewentualnie użyj także /m dla multi-line to twój ciąg "name" zawiera znaki nowej linii. Zobacz podstawowy przykład regexera .

Zaleca się również użycie $set aby modyfikować tylko pola, które naprawdę chcesz, a nie .save() cały dokument z powrotem. Jest mniejszy ruch i mniejsza szansa na nadpisanie zmian, które mogły zostać wprowadzone przez inny proces od czasu przeczytania dokumentu.

Idealnie byłoby używać interfejsu Bulk Operations API z MongoDB w wersji 2.6 i nowszych. Dzięki temu aktualizacje są „wsadowe”, dzięki czemu ruch między klientem a serwerem jest ponownie mniejszy:

var bulk = db.tests.initializeOrderedBulkOp();
var count = 0;

db.tests.find({ "name": /\ /g }).forEach(function(doc) {
    doc.name = doc.name.replace(/ /g,"");
    bulk.find({ "_id": doc._id })
        .updateOne({ "$set": { "name": doc.name } });
    count++;

    if ( count % 1000 == 0 ) {
        bulk.execute();
        bulk = db.tests.initializeOrderedBulkOp();
    }
});

if  ( count % 1000 != 0 )
    bulk.execute();

To są twoje główne sposoby na poprawę tego. Niestety nie ma możliwości, aby instrukcja aktualizacji MongoDB użyła w ten sposób istniejącej wartości jako części wyrażenia aktualizacji, więc jedynym sposobem jest pętla, ale możesz wiele zrobić, aby zmniejszyć liczbę operacji, jak pokazano.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zmienić wszystkie elementy tablicy w dokumencie mongodb na określoną wartość?

  2. MongoDB i Google Cloud Functions VPC równorzędne?

  3. Spring MongoDB proces/wyciek wątku

  4. Jak wyeksportować JSON z MongoDB za pomocą Robomongo?

  5. Jak mogę obliczyć całkowitą dodatnią, całkowitą ujemną cenę i sumę za pomocą Node.js i Mongoose?