2012-01-24 5 views
28

official documentation बाहर की जाँच के बाद, मैं अभी भी कैसे mongoose के भीतर उपयोग के & अद्यतन दस्तावेज़ बनाने के लिए के लिए तरीके बनाने के लिए पर यकीन नहीं है।मोंगोस के साथ दस्तावेजों को अद्यतन और सहेजने के तरीकों का निर्माण करना?

तो मैं यह कैसे कर सकता हूं?

mySchema.statics.insertSomething = function insertSomething() { 
    return this.insert(() ? 
} 

उत्तर

46

तरीके मॉडल की वर्तमान उदाहरण के साथ बातचीत करने के लिए उपयोग किया जाता है:

मेरे मन में कुछ इस तरह की है। उदाहरण:

var AnimalSchema = new Schema({ 
    name: String 
    , type: String 
}); 

// we want to use this on an instance of Animal 
AnimalSchema.methods.findSimilarType = function findSimilarType (cb) { 
    return this.find({ type: this.type }, cb); 
}; 

var Animal = mongoose.model('Animal', AnimalSchema); 
var dog = new Animal({ name: 'Rover', type: 'dog' }); 

// dog is an instance of Animal 
dog.findSimilarType(function (err, dogs) { 
    if (err) return ... 
    dogs.forEach(..); 
}) 

स्टैटिक्स उपयोग किया जाता है जब आप एक उदाहरण के साथ बातचीत नहीं करना चाहती है, लेकिन ('रोवर' नामक सभी पशु के लिए उदाहरण के लिए खोज) मॉडल से संबंधित सामान है।

यदि आप किसी मॉडल (डीबी में) के उदाहरण को सम्मिलित/अपडेट करना चाहते हैं, तो methods जाने का तरीका है। तुम सिर्फ बचाने के लिए की जरूरत है/अद्यतन सामान आप (पहले से ही नेवला में मौजूद) save फ़ंक्शन का उपयोग कर सकते हैं। उदाहरण:

var Animal = mongoose.model('Animal', AnimalSchema); 
var dog = new Animal({ name: 'Rover', type: 'dog' }); 
dog.save(function(err) { 
    // we've saved the dog into the db here 
    if (err) throw err; 

    dog.name = "Spike"; 
    dog.save(function(err) { 
    // we've updated the dog into the db here 
    if (err) throw err; 
    }); 
}); 
+2

का चेक करते लेकिन मैं कैसे कर सकता है एक विधि के भीतर से dog.save() '? – Industrial

+4

'this.save()', चूंकि 'यह'' कुत्ते ' – alessioalex

+3

@alessioalex को संदर्भित करेगा - मुझे लगता है कि यह mongoose दस्तावेज़ों के उदाहरण के समान है, हालांकि वे इस प्रकार को पुनः निर्दिष्ट करते हैं: 'this this.model (' Animal ') .find ({प्रकार: this.type}, सीबी); 'मैं कभी नहीं समझ लिया है हम' मॉडल (उपयोग करने के लिए क्यों' पशु ') 'यहाँ, हम पशु स्कीमा के लिए इस विधि जोड़ रहे हैं के रूप में। संभवतः यह वैकल्पिक है - क्या आपको पता है कि यह दस्तावेज़ों में इस तरह क्यों लिखा गया है? – UpTheCreek

55

एक स्थिर विधि के अंदर से, आप भी एक नया दस्तावेज़ करके बना सकते हैं:

schema.statics.createUser = function(callback) { 
    var user = new this(); 
    user.phone_number = "jgkdlajgkldas"; 
    user.save(callback); 
}; 
+2

मैं भी यह कर समाप्त हो गया - कुछ मुझे एक इस नए() बनाने हालांकि के बारे में परेशान है, और मैं क्या उस के बारे में क्या करने के लिए यकीन नहीं है। क्या किसी और के पास ऐसा करने का अच्छा तरीका है? – basicallydan

+0

यदि आपके पास है: स्थिर मॉडल से पहले var model = bla bla, आप इसके अंदर नया मॉडल() कर सकते हैं, क्योंकि यह –

+1

तक पहुंच के भीतर है। मेरे मामले में बस एक चीज: यदि आप 'm'' को mongoose क्वेरी के भीतर उपयोग करने का प्रयास करते हैं, तो यह इस क्वेरी के 'इस' को इंगित करेगा, न कि स्थिर उदाहरण के '''। वह मेरी समस्या थी। –

1

मत सोचो कि तुम एक समारोह है कि .save कॉल बनाने की आवश्यकता()। कुछ भी है कि आप से पहले मॉडल सहेजा जाता है .pre()

उपयोग किया जा सकता आप चेक चाहते हैं, तो मॉडल बनाया जा रहा है या अद्यतन करने की जरूरत है this.isNew()