我的应用程序中的用户可以创建项目和任务。 Tasks 可以是单独的,也可以在 Project 中,该项目是 Tasks 的容器。
项目
const projectSchema = new Schema({
title: { type: String, required: true },
description: { type: String, required: true },
authorId: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
});
任务
const taskSchema = new Schema({
name: { type: String, required: true },
description: { type: String, required: true },
projectId: { type: mongoose.Schema.Types.ObjectId, ref: "Project", required: false },
authorId: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
});
这是一种社交平台,用户可以在其时间线上共享整个 Project ,该 Project 中的一个 Task 或一个单个 Task 。嵌入在帖子中,也可以只是文本而没有其他内容。
发布
const postSchema = new Schema({
content: { type: String, required: false },
authorId: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
projectId: { type: mongoose.Schema.Types.ObjectId, ref: "Project", required: false } },
taskId: { type: mongoose.Schema.Types.ObjectId, ref: "Task", required: false } }
});
当然必须至少是某些东西,但是如果 User 选择嵌入 Task 或 Project ,则必须只有其中之一。像这样:
const postSchema = new Schema({
content: { type: String, required: false },
authorId: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
media: { type: mongoose.Schema.Types.ObjectId, ref: ["Project", "Task"], required: false } },
});
但是我想这根本不是一种好的语法,什么是使其有效的好方法?我也希望我的用户能够发布任何类型的媒体,不仅是 Task 或 Project ,而且还可以发布 Images , Videos ,链接 ...