2011-09-26 10 views
8

में स्कीमा बदलना मैं mongoDB और mongoose के साथ शुरू कर रहा हूं। मैं सोच रहा था कि कैसे लोग स्कीमा विकसित करते हैं। उदाहरण के लिए अगर मैं इस तरह एक स्कीमा के साथ शुरू किया:mongoDB/mongoose

user_ID : 123, 
user_firstName : 'bob', 
user_lastName : 'smith' 

और कुछ इस तरह करने के लिए इसे विकसित:

user_ID: 123, 
user_name: [first:'bob', last:'smith'] 

मैं कैसे कर सकता है या पुराने रिकॉर्ड है कि पुराने स्कीमा डिजाइन का उपयोग स्थापित किए गए थे का प्रबंधन ?

उत्तर

11

सरल डेटा परिवर्तनों को शामिल करने वाले दस्तावेज़ स्कीमा माइग्रेट करने का एक दृष्टिकोण $exists का उपयोग उन दस्तावेज़ों को खोजने के लिए करेगा जो नए फ़ील्ड गुम हैं और उन्हें माइग्रेट करते हैं।

उदाहरण के लिए, एक नया user_name क्षेत्र में firstName और lastName बदलने:

db.mycollection.find({ user_name : { $exists : false } }).forEach(
    function (doc) { 
     doc.user_name = {'first': doc.user_firstName, 'last': doc.user_lastName}; 

     // Remove old properties 
     delete doc.user_firstName; 
     delete doc.user_lastName; 

     // Save the updated document 
     db.mycollection.save(doc); 
    } 
) 

कुछ उपकरण है कि उपयोगी हो सकता है और अधिक जटिल माइग्रेशन के लिए कर रहे हैं:

  • वर्तमान स्कीमा विश्लेषण करने के लिए schema.js या variety
  • दस्तावेजों को सत्यापित करने के लिए