Наш проект имеет следующие требования:
- Пользователь может участвовать в нескольких проектах
- У проекта может быть несколько пользователей.
- Пользователь может быть либо владельцем, либо администратором, либо наблюдателем проекта.
- Очевидно, что у проекта может быть только один владелец.
- У проекта может быть несколько администраторов или зрителей.
- У каждого пользователя есть домашний проект/проект по умолчанию.
Итак, я создал следующие схемы. Но я не могу использовать заполнение, и я нахожу добавление/обновление/удаление большого количества боли. Также, когда я запрашиваю проекты, я хочу показать идентификатор электронной почты пользователей, а не objectId, но не хочу использовать электронную почту в качестве ссылки, поскольку пользователь может изменить свою электронную почту. Пожалуйста, помогите мне с лучшим дизайном, учитывая наиболее популярные операции на схеме.
- Пользователь может создать проект
- Добавить людей в проект
- Просмотреть все его проекты и участников
- Изменить роль кого-либо в проекте
- Удалить кого-либо из проекта
- Просмотр проектов, владельцев и участников (электронные письма, а не идентификаторы объектов) в соответствии с их правами
Следующие рабочие схемы представлены в отдельных файлах user.js и project.js с обязательным экспортом моделей.
var userSchema = mongoose.Schema({ username: {type:String}, password: String, email: {type:String, required:true, unique: true, index: true}, createdAt: { type: Date, default: Date.now }, firstName: String, lastName: String, home_project: {type:Schema.Types.ObjectId, ref:Project}, owner: [{type:Schema.Types.ObjectId, ref:Project}], admin: [{type:Schema.Types.ObjectId, ref:Project}], viewer: [{type:Schema.Types.ObjectId, ref:Project}] }); var projectSchema = mongoose.Schema({ projectName: {type:String, required:true, unique: true, index: true}, createdAt: { type: Date, default: Date.now }, owner: {type:String, ref:User}, admin: [{type:String, ref:User}], viewer: [{type:String, ref:User}] });