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

Намирайте и заменете низове в документи ефективно

Разбира се, ако всичко, което искате да направите, е да премахнете   обекти от вашия текст, тогава просто правите глобално съответствие и заменяте:

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

Така че не трябва да има нужда да изписвате всяка комбинация, регулярният израз ще замени много съвпадение с /g опция. Възможно е също да използвате /m за многоредов низът ви "име" съдържа знаци за нов ред. Вижте основен пример за regexer .

Също така се препоръчва да използвате $set за да промените само полето(ята), което наистина искате, вместо .save() целият документ обратно. Има по-малко трафик и по-малък шанс за презаписване на промени, които може да са направени от друг процес след прочитането на документа.

В идеалния случай бихте използвали API за групови операции с MongoDB версии 2.6 и по-нови. Това позволява на актуализациите да се „групират“, така че отново има по-малко трафик между клиента и сървъра:

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

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Удостоверяване с Spring Security + Spring данни + MongoDB

  2. Разлика между MongoFactoryBean и SimpleMongoDbFactory

  3. Как се свързвате с репликасет от обвивка на MongoDB?

  4. Зареждане на първоначални данни при стартиране на приложението с Spring Data MongoDB

  5. Как да използвам django заедно с mongoengine?