mongoose条件填充子文档

我有一个模式,看起来像这样:

var UserSchema = new Schema({ name : { type: String, required: true }, email : { type: String, lowercase: true }, fences : [{type: Schema.Types.ObjectId, ref: 'Group'}] }); var GroupMemberSchema = new Schema({ user : { type: Schema.Types.ObjectId, ref: 'User', required: true }, status : { type: String, default : 'Invited' } }); var GroupSchema = new Schema({ name : String, members : [GroupMemberSchema], type : String }); 

组和用户被导出为自己的集合。 我有一个端点api / users / me,我想让我的用户和我的所有组。 在该组中,我想填充我的成员上的用户。 我有这个代码正常工作:

 User.findOne({ _id: userId }) .populate('groups') .exec(function(err, user) { if (err) return next(err); if (!user) return res.json(401); var options = { path: 'groups.members.user', model: 'User' }; User.populate(user, options, function (err, user) { return res.json(user); }); }); 

但是,我不想填充每个成员的关联用户,如果组types=='特殊'。 我怎么会把这个选项呢?

您正在填充子文档,但填充力学没有区别

只需selecttypes为“==”的所有组,然后在已过滤的数组上运行填充

 var options = { path: 'members.user', model: 'User' }; var specialGroups = _.filter(user.groups, function(group){return group.type !== 'Special'}) User.populate(specialGroups, options, function (err, user) { return res.json(user); }); 

所以在组数组中你有一些文件填充和一些没有填充。 这很奇怪,但你可以使用specialGroups而不是user.groups