2014-12-04 3 views
1

У меня есть следующая модель в мангусте. projects раздел: protected.mongoose как проектировать защищенные поля при обновлении

var UserProjectSchema = new Schema({ 
    user : ObjectId 
    , projects : {type : [ObjectId], select:false} //protected field 
    , projectCount : Number 
}); 

Я хочу, чтобы protected поля после обновления, так что я мог вернуть новый набор projects.

UserProjectSchema.statics.addProject = function(userId, projectId) { 

    UserProject.findOneAndUpdate({ 
     user:userId 
    }, 
    { 
     $addToSet: {"projects" : projectId} 
    , $inc : {"projectCount" : 1} 
    }, 

    { 
    upsert : true 
    //project : '+projects' it won't work 
    }, 

    function(err, doc){ 
    //doc.projects is undefined 

    // UserProject.findOne({user:userId},'+projects', function(err, doc){ 
    // doc.projects is now available but this extra query ??? 
    //}) 
    }); 
} 

var UserProject = mongoose.model('user_projects', UserProjectSchema); 

Mongoose возвращает обновленный документ после успешного запроса, но ему не хватает, чтобы указать поля для проекта. Есть ли способ указать, какие поля следует проектировать после обновления в мангусте, чтобы я мог удалить дополнительный запрос?

ответ

1

Включите параметр select в свой параметр options и перечислите все поля, которые вы хотите проектировать.

{ 
    upsert : true, 
    select:{"projects":1} // all the fields you would want to select 
} 
+0

OMG это было в документах? не могу поверить. большое спасибо. – Lekhnath

+0

Добро пожаловать. Бывает. ;-) – BatScream