2014-09-07 2 views
0

Я пытаюсь использовать тестовый пример, как описано в "mongoose-schema-extend"мангуст дискриминатор найти запрос

все работает так же, как объяснено там.

Но, я бы ожидал, что это даст мне возможность выполнить поисковый запрос по унаследованному типу. Таким образом, если мы рассмотрим пример показал в приведенной выше ссылке:

var VehicleSchema = mongoose.Schema({ 
    make : String, 
}, { collection : 'vehicles', discriminatorKey : '_type' }); 

var CarSchema = VehicleSchema.extend({ 
    year : Number 
}); 
var BusSchema = VehicleSchema.extend({ 
    route : Number 
}) 

var Vehicle = mongoose.model('vehicle', VehicleSchema), 
    Car = mongoose.model('car', CarSchema), 
    Bus = mongoose.model('bus', BusSchema); 

var accord = new Car({ 
    make : 'Honda', 
    year : 1999 
}); 
var muni = new Bus({ 
    make : 'Neoplan', 
    route : 33 
}); 

Я ожидал бы Car.find({}) вернуть только те документы, которые имеют _type : Car. Вместо этого я получаю все vehicles.

Есть ли способ получить только cars кроме как делать Car.find{"_type":"Car"})?

ответ

0

Возможно, вам потребуется выполнить запрос функции для владельца пакета или выполнить запрос на вытягивание проекта самостоятельно. Обходным, однако, может быть реализован метод пользовательского найти:

CarSchema.statics._find = function(query, next) { 
    query._type = 'Car'; 
    this.find(query, next); 
} 

Car._find({}, function(err, cars) { 
    ... 
}; 

_find теперь должен возвращать только объекты автомобилей.

+0

Ключ дискриминатора - это функция, поддерживаемая Mongoose (еще не зарегистрированная вообще). Вопрос в том, есть ли встроенный способ выполнения запроса. Если нет, то я думаю, что владелец пакета не может нам помочь ... – skme

+0

@skme Как вы в итоге решили это? –

+0

Нет решения в поле зрения .. вы можете использовать то, что предложил @materik ... Отправленный вопрос в github, но до сих пор нет ответа – skme

Смежные вопросы