使用具有_id的对象数组填充对象

时间:2015-04-17 15:16:38

标签: angularjs node.js mongodb mongoose restangular

我有很多任务,当我创建/编辑时,我希望能够分配给项目。我认为应该这样做的方法是将项目ID保存到任务,以及从项目集合到达任务集合的一些方法,搜索具有匹配项目_id的所有对象,然后使用正确的任务填充tasks数组

现在我不知道这是不是正确的方法,正如你从我的代码中看到的那样,我认为我已经到了一半,但我不确定如何用正确的任务填充项目。我正在使用猫鼬,如果有人能让我知道我做错了什么以及如何做得更好,那就太棒了。

我有一个我想要链接到项目的任务列表。

TaskSchema:

var TaskSchema = new Schema({
  title: { type: String},
  description: String,
  project: [{ type: Schema.Types.ObjectId, ref: 'Project'}]
});

Tast Controller:

'use strict';

var _ = require('lodash');
var Task = require('./task.model');

// Get list of tasks

exports.index = function (req, res) {
   var populateUsers = {path:'users', select:'name profileImage email'};
   Task
      .find({})
      .populate(populateUsers)
      .populate('projects')
      .exec(function (err, tasks) {
          if (err) { //handle error
             return handleError(res, err);
                    }
          return res.json(200, tasks);
      });
};

exports.show = function (req, res) {
    var populateUsers = {path:'users', select:'name profileImage email'};
  Task
    .findById(req.params.id, function (err, task) { //get task
      if (err) { //handle error
        return handleError(res, err);
      }
      return task;
    })
        .populate(populateUsers)
    .exec(function (err, task) { //use a callback to handle error or return tasks if everything is ok
      if (err) { //handle error
        return handleError(res, err);
      }
      return res.json(task); //return task filled with "users"
    });
};


// Creates a new task in the DB.Î
exports.create = function(req, res) {
  Task.create(req.body, function(err, task) {
    if(err) { return handleError(res, err); }
    return res.json(201, task);
  });
};

// Updates an existing task in the DB.
exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Task.findById(req.params.id, function (err, task) {
    if (err) { return handleError(res, err); }
    if(!task) { return res.send(404); }
    var updated = _.merge(task, req.body);
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, task);
    });
  });
};

// Deletes a task from the DB.
exports.destroy = function(req, res) {
  Task.findById(req.params.id, function (err, task) {
    if(err) { return handleError(res, err); }
    if(!task) { return res.send(404); }
    task.remove(function(err) {
      if(err) { return handleError(res, err); }
      return res.send(204);
    });
  });
};

function handleError(res, err) {
  return res.send(500, err);
}

ProjectSchema:

var ProjectSchema = new Schema({
  name: String,
  dateCreated : {
    type : Date,
    default : Date.now
  },
  tasks: [{ type: Schema.Types.ObjectId, ref: 'Task'}]
});

获取项目列表

// Get list of projects
exports.index = function (req, res) {
   Project
      .find({})
      .populate('tasks')
      .exec(function (err, projects) { 
          if (err) { //handle error
             return handleError(res, err);
          }
          return res.json(200, projects); 
      });
};

0 个答案:

没有答案