MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Temukan dan Ganti String dalam Dokumen Secara Efisien

Tentunya jika yang ingin Anda lakukan hanyalah menghapus   entitas dari teks Anda maka Anda cukup melakukan pencocokan global dan mengganti:

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

Jadi tidak perlu menuliskan setiap kombinasi, regex akan diganti sangat cocok dengan /g pilihan. Mungkin juga menggunakan /m untuk multi-baris adalah string "nama" Anda berisi karakter baris baru. Lihat contoh regexer dasar dasar .

Juga disarankan untuk menggunakan $set untuk hanya mengubah bidang yang benar-benar Anda inginkan daripada .save() seluruh dokumen kembali. Ada lebih sedikit lalu lintas dan lebih sedikit peluang untuk menimpa perubahan yang mungkin dibuat oleh proses lain sejak dokumen dibaca.

Idealnya Anda akan menggunakan Bulk Operations API dengan MongoDB versi 2.6 dan yang lebih baru. Ini memungkinkan pembaruan untuk "batch" sehingga ada lebih sedikit lalu lintas antara klien dan server:

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

Itu adalah cara utama Anda untuk meningkatkan ini. Sayangnya tidak ada cara untuk pernyataan pembaruan MongoDB untuk menggunakan nilai yang ada sebagai bagian dari ekspresi pembaruannya dengan cara ini, jadi satu-satunya cara adalah mengulang, tetapi Anda dapat melakukan banyak hal untuk mengurangi operasi seperti yang ditunjukkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. php mongodb temukan entri ke-n dalam koleksi

  2. cara membuat indeks dari luwak dalam pencarian elastis di node,expressjs

  3. Node.js + MongoDB :MongoError:kursor mati atau habis waktu

  4. Bereaksi permintaan POST dengan Express/Node dan MongoDB

  5. tidak dapat menemukan host yang cocok dengan preferensi baca di mongodb