2013-11-15 14 views
8

मेरी नेवला स्कीमा में से एक में कई संदर्भ के लिए कई निकाला जा रहा है कई रिश्ते के लिए कई है सरणी?नेवला

GroupSchema.pre('remove', function(next){ 
    //Remove group._id from all the users 
}) 

उत्तर

15

आप इस के लिए 'remove' मिडलवेयर उपयोग करने के लिए सही रास्ते पर हैं। मिडलवेयर फ़ंक्शन में, this समूह उदाहरण हटा दिया जा रहा है और आप अन्य मॉडलों को model विधि के माध्यम से एक्सेस कर सकते हैं।

GroupSchema.pre('remove', function(next){ 
    this.model('User').update(
     {_id: {$in: this.users}}, 
     {$pull: {groups: this._id}}, 
     {multi: true}, 
     next 
    ); 
}); 

या आप ऐसे मामलों में जहां अपने समूह उदाहरण में users क्षेत्र पूर्ण न हो समर्थन करना चाहते हैं यदि आप कर सकता है:: तो आप कुछ की तरह कर सकते हैं

GroupSchema.pre('remove', function(next){ 
    this.model('User').update(
     {groups: this._id}, 
     {$pull: {groups: this._id}}, 
     {multi: true}, 
     next 
    ); 
}); 

लेकिन WiredPrairie नोटों के रूप में, के लिए अच्छा विकल्प के लिए आप इस विकल्प को groups पर एक इंडेक्स चाहते हैं।

+3

और अगर 'groups' अनुक्रमित नहीं है, आप एक पूर्ण तालिका स्कैन और उपयोगकर्ताओं की सरणी स्कैन के लिए मजबूर करेंगे। – WiredPrairie

+0

@WiredPrairie इसके आसपास एक तरीका है यदि दोगुनी-जुड़े संदर्भ विश्वसनीय हैं। मैंने कहा कि एक बेहतर विकल्प के रूप में। – JohnnyHK

+0

हाँ, यह एक सुधार है और बेहतर काम करना चाहिए। – WiredPrairie