mongoose populate array of subdocuments code example

Example 1: populate subdocument mongoose

ProjectMetadata.findOne({id:req.params.prjId})
    .populate(
        [{
        path:'tasks',
        model:TaskMetadata,
        populate:[{
            path:'assigned_to',
            model:User,
            select:'name employee_id'
        },
        {
            path:'priority',
            model:Priority,
            select:'id title'
        }],
        select:"task_name id code assign_to stage priority_id"
    },
    {
        path:'client',
        model:Client,
        select:"client_name"
    },
    {
        path:'prjct_mgr',
        model:User,
        select:"name"
    },
    {
        path:'acc_exec',
        model:User,
        select:'name employee_id'
    },
    {
        path:'poc',
        model:User,
        select:'name employee_id'
    },
    {
        path:'prj_type',
        model:ProjectType,
        select:"type -_id"
    }

])

Example 2: how to delete popultate subdocument mongoose

Surf
    .find({user_id: {$in: userIds}})
    .populate('user_id', 'name boards') // added boards
    .populate('friends', 'name')
    // .populate('board_id', 'name size') // can't do this as discussed
    .exec(function (err, surfs) {
      if (err) {
        return handleError(res, err);
      }

      surfs.forEach(function (surf) {
        surf.set('boardInfo', surf.user_id.boards.id(surf.board_id), {strict: false});
      });
      // TODO: now remove the surf.user_id.boards.
      return res.json(200, surfs);
    });

Example 3: how to delete popultate subdocument mongoose

exports.feed = function (req, res) {
  var userIds = req.user.friends;

  Surf
    .find({user_id: {$in: userIds}})
    .populate('user_id', 'name boards') // added boards
    .populate('friends', 'name')
    // .populate('board_id', 'name size') // can't do this as discussed
    .exec(function (err, surfs) {
      if (err) {
        return handleError(res, err);
      }

      surfs.forEach(function (surf) {
        surf.boardInfo = surf.user_id.boards.id(surf.board_id)
      });
      // TODO: now remove the surf.user_id.boards.
      return res.json(200, surfs);
    });

};