Я новичок в Mongoose и пытаюсь понять, как правильно объявлять структуры.
Скажем, у меня есть одна коллекция todos
, которая должна содержать документы, описывающие, что нужно делать. Все элементы TODO имеют некоторые общие свойства, но большинство деталей зависит от конкретной задачи.
// Tasks:
var hairCutSchema = new Schema({
style: {type: String, required:true},
length: Number
});
var paintWallSchema = new Schema({
color: {type: String, required:true},
surface: Number, required:true},
layers: Number
});
let napSchema = new Schema({
duration: {type: Number, required:true},
dream: String,
pillows: Number,
// ....
});
// TODOs (parent document):
var todoSchema = new Schema({
due: Date,
created: Date,
task: <either hairCutSchema, paintWallSchema OR napSchema>
});
Конечно, это не совсем правильный код, но я надеюсь, что он прояснит мою проблему:
Каждый элемент списка дел должен содержать ровно одну задачу. Существует ограниченный, хорошо известный список возможных задач, и каждая из них имеет очень специфические свойства/схему (в моем приложении эти вложенные документы были бы намного сложнее).
Насколько я знаю, это невозможно решить с помощью [вложенных документов], потому что я могу назначить только один тип вложенного документа для каждого поля. В любом случае мне нужен ровно один поддокумент, а не список.
Альтернативой может быть что-то вроде этого:
var todoSchema = new Schema({
due: Date,
created: Date,
hairCutTask: haitCutSchema,
paintWallTask: paintWallSchema,
napTask: napSchema
});
Однако таким образом схема не помешает мне объявить hairCutTask
и napTask
одновременно - и, вероятно, обязательные поля вложенного документа в любом случае сделают каждый из трех требуемых типов.
Как лучше всего структурировать такие данные и как должна выглядеть схема?