2016-05-09 7 views
6

मैं चाहता हूं कि मेरी स्कीमा का location फ़ील्ड डिफ़ॉल्ट रूप से छुपाया जाए। मैं इसे करने के लिए select: false संपत्ति जोड़ा, लेकिन यह हमेशा जब दस्तावेज़ का चयन दिया जाता है ...मोंगोस का चयन करें: स्थान नेस्टेड ऑब्जेक्ट पर काम नहीं कर रहा है

var userSchema = new mongoose.Schema({ 

cellphone: { 
    type: String, 
    required: true, 
    unique: true, 
}, 

location: { 
    'type': { 
    type: String, 
    required: true, 
    enum: ['Point', 'LineString', 'Polygon'], 
    default: 'Point' 
    }, 
    coordinates: [Number], 
    select: false, <-- here 
    }, 
}); 

userSchema.index({location: '2dsphere'}); 

जब बुला:

User.find({ }, function(err, result){ console.log(result[0]); });

उत्पादन होता है:

{ 
    cellphone: '+33656565656', 
    location: { type: 'Point', coordinates: [Object] } <-- Shouldn't 
} 

संपादित करें: स्पष्टीकरण (@alexmac के लिए धन्यवाद)

SchemaType चयन विकल्प को फ़ील्ड विकल्पों पर लागू नहीं किया जाना चाहिए। उदाहरण में आपने एक जटिल प्रकार की स्थिति परिभाषित की है और एक प्रकार के लिए चयन विकल्प जोड़ा है।

+0

क्या findOne के बारे में है, यह इसे वापस या नहीं करता है? – libik

+0

समस्या हल हो गई है। और हाँ, पाते हैं कि इसे भी वापस कर दिया :) – FrenchFalcon

+0

अच्छा होगा अगर आपने अपना समाधान साझा किया। @MonymousFalcon – Cozzbie

उत्तर

2

आप सबसे पहले locationSchema बनाना चाहिए और select: false साथ कि उपयोग स्कीमा प्रकार के बाद:

var locationSchema = new mongoose.Schema({ 
    'type': { 
     type: String, 
     required: true, 
     enum: ['Point', 'LineString', 'Polygon'], 
     default: 'Point' 
     }, 
     coordinates: [Number] 
    } 
}); 

var userSchema = new mongoose.Schema({ 
    location: { 
     type: locationSchema, 
     select: false 
    } 
}); 
+0

मैंने यह भी कोशिश की, लेकिन मैं या तो काम नहीं करता हूं। – FrenchFalcon

+0

हम करीब हैं, निर्देशांक अब और नहीं दिखाया जाता है, लेकिन स्थान के बाकी है: '" स्थान ": {" type ":" प्वाइंट "}' नोट: स्थान को गलत भी: मैं चुनिंदा गयी। – FrenchFalcon

+0

ठीक है, मैंने सोचा था कि आप केवल 'समन्वय' फ़ील्ड को छिपाना चाहते हैं, अगर आप 'स्थान' को पूरी तरह छिपाना चाहते हैं, तो आपको इसके लिए स्कीमा परिभाषित करना चाहिए और इसे टाइप के रूप में उपयोग करना चाहिए। – alexmac

संबंधित मुद्दे