2012-11-25 18 views
5

संक्षिप्त और स्पष्ट: क्या स्कीमा फ़ील्ड को सेट करने से रोकने का कोई तरीका है लेकिन मूल्य प्राप्त करने की अनुमति है?मोंगोस स्कीमा सुरक्षित क्षेत्र

मैं Mongoose Documentation के आसपास रहा हूं लेकिन जो भी मैं ढूंढ रहा हूं उसे नहीं मिल सकता।

उत्तर

2

पारंपरिक क्षेत्र की जगह virtual गेटर के रूप में फ़ील्ड को परिभाषित करें।

var schema = new Schema({ 
    city: String, 
    state: String 
}); 

schema.virtual('pop').get(function() { 
    return this._doc.pop; 
}); 

अपने मॉडल उदाहरण के निजी _doc सदस्य तक पहुँचने यह संभव है इस में टूट सकता है द्वारा:

उदाहरण के लिए, आप अपने संग्रह केवल पढ़ने के लिए जब नेवला के माध्यम से एक्सेस की pop क्षेत्र बनाना चाहते थे कहना भविष्य, लेकिन जब मैंने अभी परीक्षण किया तो यह ठीक काम करता था।

+0

कैसे काम करता है? आभासी जारी नहीं है, है ना? – sidgate

+1

@ सिडगेट यह एक पुराना उत्तर है और स्कीमा में परिभाषित फ़ील्ड का पर्दाफाश करने के लिए एक हैक का थोड़ा सा है, लेकिन अंतर्निहित दस्तावेज़ों में मौजूद है। तो आप सही हैं कि वर्चुअल जारी नहीं होते हैं, लेकिन चूंकि 'पॉप' फ़ील्ड पहले से ही वहां है, इसलिए यह काम करता है क्योंकि कच्चा दस्तावेज़ (अनियंत्रित) '_doc' फ़ील्ड के माध्यम से उपलब्ध है। – JohnnyHK

11

एक वैकल्पिक आप एक डिफ़ॉल्ट मान बदल कभी नहीं किया जा सकता है कि सेट करना चाहते हैं:

var schema = new Schema({ 
    securedField: { 
    type: String, 
    default: 'Forever', 
    set: function (val) { return this.securedField; } 
}); 
संबंधित मुद्दे