我有很多任务,当我创建/编辑时,我希望能够分配给项目。我认为应该这样做的方法是将项目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);
});
};