Mongoose填充嵌套文档的匹配条件

时间:2016-08-26 18:25:59

标签: mongoose-populate

我有一个像这样的猫鼬模式:

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'

})

现在,这将返回类别匹配的所有产品,但是在不满足位置过滤器的任何地方,它返回一个带有null的商店,并在满足位置过滤器的任何地方返回商店。

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

答案 1 :(得分:0)

在Mongoose 5.2.7中,语法match: { 'x.y': 'something' }很有魅力

答案 2 :(得分:0)

也许您可以尝试一下,它对我有用。

Product
  .find({'category':'accessories'})
  .populate(path: 'store', 
            model: 'Store', 
             match:{address.city:{$eq:"YOUR_CITY"}}}).exec(function(err, res){})