2016-05-09 11 views
6

Desidero che il campo location del mio schema sia nascosto per impostazione predefinita. Ho aggiunto select: false proprietà ad esso, ma è sempre tornato quando si seleziona i documenti ...Mongoose select: false non funziona su posizione nidificata dell'oggetto

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'}); 

al momento della chiamata:

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

l'output è:

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

MODIFICA: Spiegazione (grazie a @alexmac)

L'opzione di selezione SchemaType deve essere applicata alle opzioni di campo e non a un tipo. Nell'esempio hai definito un tipo di posizione complesso e hai aggiunto un'opzione di selezione a un tipo.

+0

Che dire findOne, lo fa tornare o no? – libik

+0

Il problema è stato risolto. E sì, findOne lo ha restituito :) – FrenchFalcon

+0

Sarebbe bello se tu avessi condiviso la tua soluzione. @MalteseFalcon – Cozzbie

risposta

2

È necessario creare in primo luogo locationSchema e dopo che l'uso tipo di schema con 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

Ho provato anche questo, ma non funziona neanche io. – FrenchFalcon

+0

Siamo vicini, le coordinate non sono più mostrate, ma il resto della posizione è: '" posizione ": {" tipo ":" Punto "}' Nota: Ho aggiunto select: false to location. – FrenchFalcon

+0

Ok, pensavo che volessi nascondere solo il campo 'coordinate', se vuoi nascondere' location' completamente, devi definirlo schema e usarlo come tipo. – alexmac