【发布时间】:2017-01-17 20:20:42
【问题描述】:
我是 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>
});
当然,这不是真正有效的代码,但我希望它能说明我的问题:
每个待办事项都应该包含一个任务。有一个有限的、众所周知的可能任务列表,每个任务都有非常具体的属性/schema(在我的应用程序中,这些子文档会更加复杂)。
AFAIK 这无法使用 [子文档] 解决,因为我只能为每个字段分配 一个 子文档类型。无论如何,我只需要一个子文档,而不是列表。
另一种可能是这样的:
var todoSchema = new Schema({
due: Date,
created: Date,
hairCutTask: haitCutSchema,
paintWallTask: paintWallSchema,
napTask: napSchema
});
但是,这样架构不会阻止我同时声明 hairCutTask 和 napTask - 并且可能所需的子文档字段会使 每个 成为必需的三种类型.
什么是构建此类数据的好方法以及架构应该是什么样的?
【问题讨论】:
-
"AFAIK 这无法使用 [子文档] 解决,因为我只能为每个字段分配一个子文档类型。" -- 您可以为此查看 Schema.Types.Mixed(不如创建对集合项的实际引用有用)
-
这种“混合”模式类型不会阻止我存储一些毫无意义的东西,不匹配任何任务模式,对吧?