在包含对象数组的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); });