मैं अपने मोंगोडीबी संग्रहों में से एक के लिए स्कीमा बदलने की प्रक्रिया में हूं। (मैं तारों के रूप में तारीखों को संग्रहीत कर रहा था, और अब मेरा एप्लिकेशन उन्हें ISODate
एस के रूप में संग्रहीत करता है; मुझे वापस जाने और ISODate
एस का उपयोग करने के लिए सभी पुराने रिकॉर्ड बदलने की आवश्यकता है।) मुझे लगता है कि मुझे अपडेट का उपयोग करके यह कैसे करना है , लेकिन चूंकि यह ऑपरेशन हजारों रिकॉर्डों को प्रभावित करेगा, इसलिए मैं एक ऑपरेशन जारी करने में संकोच कर रहा हूं कि मैं 100% निश्चित नहीं हूं। क्या एक अद्यतन की "सूखी दौड़" करने का कोई तरीका है जो मुझे दिखाएगा, रिकॉर्ड की एक छोटी संख्या के लिए, मूल रिकॉर्ड और यह कैसे बदला जाएगा?क्या एक अद्यतन ऑपरेशन के "सूखे रन" को करने का कोई तरीका है?
संपादित करें: मैं प्रत्येक रिकॉर्ड करने के लिए एक नए क्षेत्र को जोड़ने, और फिर से दृष्टिकोण का उपयोग कर समाप्त हो गया मूल मिलान करने के लिए उस क्षेत्र का नाम बदलने (सत्यापित करें कि डेटा सही था के बाद)। यह इस तरह से देखा: वैसे
db.events.find({timestamp: {$type: 2}})
.forEach(function (e) {
e.newTimestamp = new ISODate(e.timestamp);
db.events.save(e);
})
db.events.update({},
{$rename: {'newTimestamp': 'timestamp'}},
{multi: true})
, ISODate
रों को स्ट्रिंग बार परिवर्तित करने के लिए है कि विधि क्या काम कर रहा समाप्त हो गया था। (मुझे this SO answer से विचार मिला।)
मेरी सलाह आईएसओडीएटी को एक नए क्षेत्र के रूप में जोड़ना होगा। एक बार पुष्टि हुई कि सभी अच्छे दिखते हैं तो आप स्ट्रिंग तिथि को अनसेट कर सकते हैं। –
@JamesWahlin का सही विचार है, यहां तक कि एसक्यूएल में जो सूखे रनों का समर्थन करता है मैं यह नहीं करता – Sammaye
@JamesWahlin क्या आप अपनी टिप्पणी को उत्तर के रूप में जोड़ सकते हैं? – bdesham