इसके लायक क्या है, जबकि यह करना भयानक लगता है, समाधान वास्तव में बहुत आसान है। यह निश्चित रूप से इस बात पर निर्भर करता है कि आपके पास कितने रिकॉर्ड हैं। लेकिन यहाँ मेरा उदाहरण है:
db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{
for(i = 0; i != item.Value.Tiers.length; ++i)
{
item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
delete item.Value.Tiers[i].AssetsUnderManagement;
}
db.Setting.update({_id: item._id}, item);
});
मैं अपने संग्रह पर पुनरावृति करता हूं जहां सरणी पाई जाती है और "गलत" नाम पाया जाता है। मैं फिर उप संग्रह पर पुनरावृति करता हूं, नया मान सेट करता हूं, पुराने को हटाता हूं और पूरे दस्तावेज़ को अपडेट करता हूं। यह अपेक्षाकृत दर्द रहित था। माना कि मेरे पास खोजने के लिए केवल कुछ दसियों हज़ार पंक्तियाँ हैं, जिनमें से केवल कुछ दर्जन ही मानदंडों को पूरा करती हैं।
फिर भी, मुझे आशा है कि यह उत्तर किसी की मदद करेगा!
संपादित करें:जोड़ा गया snapshot()
क्वेरी के लिए। टिप्पणियों में देखें क्यों।
आपको snapshot()
apply लागू करना होगा डेटाबेस से किसी भी दस्तावेज़ को पुनर्प्राप्त करने से पहले कर्सर पर। आप केवल snapshot()
का उपयोग कर सकते हैं शार्प न किए गए संग्रहों के साथ।
MongoDB 3.4 से, snapshot()
समारोह हटा दिया गया था। तो अगर मोंगो 3.4+ का उपयोग कर रहे हैं, तो ऊपर दिए गए उदाहरण को हटा देना चाहिए snapshot()
समारोह।