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 . का भी उपयोग करें बहु-पंक्ति के लिए आपका "नाम" स्ट्रिंग में न्यूलाइन वर्ण हैं। एक बुनियादी रेगेक्सर उदाहरण देखें ।

$set .save() . के बजाय केवल उस फ़ील्ड को संशोधित करने के लिए जिसे आप वास्तव में चाहते हैं पूरा दस्तावेज़ वापस। दस्तावेज़ पढ़ने के बाद से किसी अन्य प्रक्रिया द्वारा किए गए परिवर्तनों को ओवरराइट करने के लिए कम ट्रैफ़िक और कम संभावना है।

आदर्श रूप से आप मोंगोडीबी संस्करण 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. संग्रह में दस्तावेज़ों के समान नामित फ़ील्ड के सभी मानों का योग करें

  2. आप MongoDB प्रोजेक्शन एग्रीगेशन में किसी विशिष्ट सरणी आइटम का उपयोग कैसे करते हैं?

  3. फर्मवेयर के लिए Django ऐप एसएसएल सॉकेट कनेक्शन

  4. MongoDB C# सरणी अनुक्रमणिका या सरणी के आंतरिक आइटम अनुक्रमणित करना

  5. परीक्षण कंटेनरों में मोंगो