2013-07-01 19 views
6

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

मैं वर्तमान में 'माइग्रेट' मॉड्यूल का उपयोग कर रहा हूं और यह इस तथ्य को छोड़कर महान काम करता है कि मुझे प्रत्येक अप/डाउन में अपना कनेक्शन बनाने/नष्ट करने की आवश्यकता है।

आईई।

// Setup mongoose 
var mongoose = require('mongoose') 
    , Role = require('../models/role') 
    , User = require('../models/user'); 

exports.up = function(next) { 
    // get a brand new connection for this patch. 
    mongoose.connect('mongodb://localhost/sagedb'); 

    var adminUser = { 
    username: 'admin', 
    password: 'admin' 
    }; 

    User.createUser(adminUser, function(err, user) { 
    if (err) { 
     mongoose.disconnect(); // Make sure to close connection 
     return next(err); 
    } 

    mongoose.disconnect(next); // Make sure to close connection 
    }); 
}; 

exports.down = function(next) { 
    mongoose.connect('mongodb://localhost/sagedb'); // new connection for down 

    User.getUserByUsername('admin', function(err, user) { 
    if (err) { 
     mongoose.disconnect(function() { // make sure to close connection 
     return next(err); 
     }); 
    } 

    if (!user) { 
     mongoose.disconnect(); // make sure to close connection 
     return next(); 
    } 

    User.deleteUser(user, function(err, user) { 
     console.log('deleted user'); 
     mongoose.disconnect(next); // make sure to close connection 
    }); 
    }); 
}; 

शायद ऐसा करने का एक बेहतर तरीका है। आश्चर्य है कि एकमात्र विकल्प मेरा खुद का मॉड्यूल बनाना है जो एक बार कनेक्शन शुरू करता है और सभी पैच पूर्ण होने पर इसे बंद कर देता है।

मैंने मोंगोस-माइग्रेट देखा है जो डेटाबेस संग्रह में माइग्रेशन ट्रैक करता है। वास्तव में mongoose IMHO के लिए विशिष्ट नहीं है, मैं अभी भी .migrate फ़ाइल का उपयोग करता हूं लेकिन केवल एक बार कनेक्शन खोलना होगा।

उत्तर

2

समस्या का कारण यह है कि आपके पास प्रत्येक बार "कनेक्ट" होता है, प्रत्येक पर, माइग्रेशन यही कारण है कि आपको डिस्कनेक्ट करना होगा। यदि आप mongoose.createConnection से कनेक्ट करते हैं तो वही स्थिति। आपको इसे बंद करने की आवश्यकता होगी।

कैसे हल करें?

कदम

var mongoose = require('mongoose') 
     , Role = require('../models/role') 
     , User = require('../models/user'); 

डाटाबेस की तरह मॉड्यूल में

var mongoose = require('mongoose') 
     , Role = require('../models/role') 
     , User = require('../models/user'); 
module.exports = mongoose  

और बस की आवश्यकता होती है

 var mongoose = require('./db') 

तो तुम होगा:

  • एकल कनेक्शन
  • सभी मॉडलों माइग्रेशन
0

में एक ही स्थान पर

  • स्वच्छ कोड में लोड तुम भी मेरी migrate-mongoose प्रवास ढांचे शानदार तरीके से नेवला कनेक्शन प्रदान करता है की कोशिश कर सकते हैं।

    अपने up या down समारोह में आप सिर्फ इस

    this('user').findOne({ name: 'Sergey' }); 
    

    यह भी डेटाबेस के बजाय फाइल सिस्टम के लिए आपके माइग्रेशन बनी रहती है की तरह अपने मॉडल का उपयोग कर सकते हैं।

  • 0

    तुम भी पूर्व प्रवास रूपरेखा है कि बहुत शक्तिशाली है और यह भी MongoDB एडेप्टर है: https://github.com/okv/east

    तो आप करेंगे कमांड के साथ टोकरा पलायन:

    east create my_migration_name 
    

    और फिर अपने माइग्रेशन स्क्रिप्ट की तरह दिखाई देगा यह:

    exports.migrate = function(client, done) { 
        var db = client.db; 
        db......... 
        done(); 
    }; 
    
    exports.rollback = function(client, done) { 
        var db = client.db; 
        db......... 
        done(); 
    };