Выбор мангуста: false не работает с вложенным объектом местоположения

Я хочу, чтобы поле 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
 }

EDIT: Объяснение (спасибо @alexmac)

Параметр выбора SchemaType должен применяться к параметрам поля, а не к типу. В вашем примере вы определили сложное местоположение типа и добавили опцию выбора к типу.


person Scaraux    schedule 09.05.2016    source источник
comment
А как насчет findOne, возвращает он его или нет?   -  person libik    schedule 09.05.2016
comment
Проблема решена. И да, findOne тоже вернул его :)   -  person Scaraux    schedule 09.05.2016
comment
Было бы неплохо, если бы вы поделились своим решением. @MalteseFalcon   -  person Cozzbie    schedule 30.12.2016


Ответы (1)


Вы должны сначала создать 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
    }
});
person alexmac    schedule 09.05.2016
comment
Мы близки, координаты больше не отображаются, но остальная часть местоположения: "location": { "type": "Point" } Примечание: я также добавил select: false к местоположению. - person Scaraux; 09.05.2016
comment
Хорошо, я думал, что вы хотите скрыть только поле coordinates, если вы хотите полностью скрыть location, вы должны определить для него схему и использовать ее как тип. - person alexmac; 09.05.2016
comment
Можете ли вы просто удалить скобку после coordinates и заменить ; после locationSchema на ,. Наконец, не могли бы вы просто объяснить, почему атрибут select не работает напрямую внутри вложенных объектов? Почему мы должны объявлять внешние схемы? - person Scaraux; 09.05.2016
comment
Параметр SchemaType select должен применяться к параметрам поля, а не к типу. В вашем примере вы определили сложный тип Location и добавили к типу параметр select. - person alexmac; 09.05.2016