2015-09-01 2 views
1

у меня есть схема, которая выглядит следующим образом:мангуст условно Заселите на поддокументе

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); 
     }); 

    }); 

Однако, я не хочу, чтобы заполнить связанный пользователя каждого члена IF тип группы == «Special». Как я могу использовать варианты?

ответ

1

Вы заселение поддокумент, но никаких различий в заселить механике

Просто выберите все группы с типом! == «Special» и запустить заселить на фильтрованной массиве

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); 
}); 

так внутри группы массива вы некоторые документы заполнены, а некоторые не заселены. Это странно, но вы можете использовать специальные группы вместо user.groups

Смежные вопросы