2016-08-26 6 views
0

У меня есть мангуста схему так:Mongoose заселить с условием соответствия для вложенного документа

var Address = { 
    doorNo:String, 
    city:String, 
    state:String, 
    country:String, 
    district:String, 
    zipCode:String, 
    area:String, 
    locality:String 
}; 

var StoreSchema = { 
    name:String, 
    address:Address, 
    category:[String], 
    products:[{ type:Schema.ObjectId, ref:"Product" }], 
}; 

var ProductSchema = { 
    name:String, 
    description:String, 
    category:String, 
    subCategory:String, 
    store: { type:Schema.ObjectId, ref:"Store", childPath:"products" } 
}; 

Мне нужно фильтровать продукты на основе продукта-категории и адрес-город. Получайте только те продукты, которые принадлежат определенному местоположению (город в адресной схеме) и определенную категорию.

Я попытался следующий код:

Product 
    .find({'category':'accessories'}) 
    .populate({ 
    path: 'store', 
    match: { 'address.city': req.params.location}, 
    select:'_id' 

}) 

Теперь это возвращает все продукты, где категории ссылок, но везде, где фильтр место не довольная возвращается в магазин с нулевым и возвращает магазин, где расположение фильтра выполняется.

ответ

0

Вы можете попробовать это:

Product 
    .find({'category':'accessories','store.address.city': req.params.location}) 
    .populate({ 
    path: 'store', 
    select:'_id' 
    }) 
+0

возвращает пустой массив ...... потому что при этом «найти()», это еще не заселена ... поэтому он не имеет магазин для запроса по адресу –

+0

Но все же он должен возвращать согласованный элемент. Позвольте мне еще раз проверить. –