NodeJS 填充方法未按预期工作

798qvoo8  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(118)

我有两个计划项目和任务。

const mongoose = require("mongoose"); 
const projectSchema = new mongoose.Schema({
  title: String,
  sub_title: String,
  tasks: [{ type: mongoose.Schema.Types.ObjectId, ref: "Task" }],
});

const Project = mongoose.model("Project", projectSchema);

module.exports = Project;
const mongoose = require("mongoose"); 
const taskSchema = new mongoose.Schema({
  title: String,
  sub_title: String,
  time: String,
  projectId: String,
  timeSheet:[],
  project: { type: mongoose.Schema.Types.ObjectId, ref: "Project" },
});

const Task = mongoose.model("Task", taskSchema);

module.exports = Task;

我让用户输入项目细节,然后可以在其中添加任务。我使用populate方法来获取项目模式中与特定项目相关的所有任务。但是当我得到所有项目时,它并没有在其中添加任务。请帮我解决这个bug。
我曾试图通过推送来添加任务,但当我更新任务时,它不会显示在项目模式中

niknxzdl

niknxzdl1#

不幸的是,mongoose关系不会自动建立,因此您仍然需要将Project _id添加到每个Task中。就像你把每个任务_id添加到每个项目的项目数组中一样。

//Get the id of the Project and Task that are related
const projectid = req.body.projectid;
const taskid = req.body.taskid;

// Get the Parent Project. I have used findById() for demonstration 
const project = await Project.findById(projectid);

// Add the project._id ObjectId into the task.project field. 
// I have used findByIdAndUpdate() for demonstration 
const task = await Task.findByIdAndUpdate(taskid,
   { project: project._id },
   { new: true }
);

// Add the task._id ObjectId into the project.tasks array.  
project.tasks.push(task._id);
await project.save();

现在,当你想获取项目并调用populate时,它会查找任务并将每个项目中的ObjectId替换为完整的文档。

相关问题