2016-08-26 70 views
0

我有一个猫鼬的模式是这样的:猫鼬与匹配条件填充嵌套文件

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

但是,还是应该返回匹配的元素。让我再检查一次。 –