在包含对象数组的mongoose中过滤子文档

我试图返回给定用户的评级列表,按类别过滤。

var UserSchema = new Schema({ ... ratings: [{ item: { type: Schema.Types.ObjectId, ref: 'Items' }, category: String, rating: Number }] 

如果我做了以下,我只得到这个类别的第一个评级:

 var query = User.findOne(userId, 'ratings'); query.select({ 'ratings': { $elemMatch: { 'category': req.query.category }}}); 

以下也只返回第一个评价:

 var query = User.find(); query.where({'_id': userId, 'ratings.category': req.query.category}); query.select({ 'ratings.$': 1 }); 

我能够汇总正确的结果与以下,但是,我不认为这将工作,因为我不能在聚合后填充。

 var query = User.aggregate( { $match: { _id: userId }}, { $project: { _id: 1, ratings: 1 }}, { $unwind: '$ratings' }, { $match: { 'ratings.category': req.query.category }} ); 

你可以做你的聚集之后的人口 ,如下所示:

 var pipeline = [ { $match: { _id: userId }}, { $project: { _id: 1, ratings: 1 }}, { $unwind: '$ratings' }, { $match: { 'ratings.category': req.query.category } } ]; User.aggregate(pipeline, function (err, result){ User.populate(result, {path: "ratings.item"}, callback); });