बिल्कुल नहीं, और इससे मेरा मतलब है कि यदि आप "सटीक स्ट्रिंग" की तलाश नहीं कर रहे थे और हमेशा "समान" अलग स्ट्रिंग के साथ प्रतिस्थापित करना चाहते थे।
अनिवार्य रूप से ऐसा लगता है कि आप दस्तावेज़ों के लिए "रेगेक्स रिप्लेस" की तलाश कर रहे हैं जिसे .update()
के माध्यम से निष्पादित किया जा सकता है। . हालांकि यह संभव है कि $regex
खोज के लिए, कोई "कैप्चर" या स्टेटमेंट के "अपडेट" भाग जैसे $set
।
तो इस प्रकार के अपडेट को करने के लिए, आपको अपने दस्तावेज़ों को लूप करना होगा और कोड में संशोधन करना होगा। लेकिन बल्क ऑपरेशन API यहाँ कुछ मदद की जा सकती है:
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();
ताकि अभी भी लूपिंग की आवश्यकता हो लेकिन कम से कम अपडेट केवल प्रत्येक 1000 दस्तावेज़ संसाधित होने के बाद सर्वर पर भेजे जाते हैं।