猫鼬:如何查询子文档

时间:2015-10-22 20:02:51

标签: mongoose

我有以下型号

var ProgramSchema = new Schema({
  created: {
    type: Date, default: Date.now
  },
  user: {
    type: Schema.ObjectId,  ref: 'User'
  },
  name: {
    type: String, default: '', required: 'Name cannot be blank', trim: true
  },
  permissions: [{
      user: {
        type: Schema.ObjectId, ref: 'User'
      },
      roles: {
        type: [{
            type: String, enum: ['reader', 'editor', 'admin', 'requested']
          }]
      }
    }]
});

我需要3个不同的查询。我敢肯定,如果你帮助我其中一个,我可以弄明白另外两个。

  1. 我希望它返回一个用户是读者,编辑或管理员角色的程序列表
  2. 我希望它返回一个用户是编辑或管理员角色的程序列表
  3. 我希望它返回用户在所请求的角色中的程序列表

1 个答案:

答案 0 :(得分:0)

想出来。

我通过修改现有的programs.client.service.js

创建了一个新工厂
angular.module('programs')
  .factory('Programs', ['$resource',
    function ($resource) {
      return $resource('api/programs/:programId', {
        programId: '@_id'
      }, {
        update: {
          method: 'PUT'
        }
      });
    }
  ])
  .factory('ProgramsSubscribedForUser', ['$resource',
    function($resource) {
        return $resource('api/programs/user/:userId', {
            userId: ''
        }, {
            update: {
                method: 'PUT'
            }
        });
    }
]);

在programs.server.js中添加了一条新路线

app.route('/api/programs/user/:userId').all(programsPolicy.isAllowed)
    .get(programs.listProgramsSubscribedForUser);

在programs.server.controller.js

中添加了新功能
exports.listProgramsSubscribedForUser = function (req, res) {
  Program.find(
    { $and: [ 
        {"permissions.user" : req.user }, 
        {"permissions.roles" : { $in: [ 'admin', 'editor', 'reader' ] } }
     ] }
    ).sort('-created').populate('user', 'displayName').exec(function (err, programs) {

    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.json(programs);
    }
  });
};