我正在设计一个MongoDB架构来保存一个相当大/嵌套的文档。我打算尽可能多地嵌入到单个文档中,但不确定如何处理代码/查找值。例如,如果我们有一个代表“priority”的代码表,可能的值为:
这是我应该使用Mongoose引用的东西,并创建一个简单的文档来保持优先级,例如:
var PrioritySchema = new Schema({
description: String
});
然后将使用以下内容引用它:
var AnotherSchema = new Schema({
name: String,
active: Boolean,
priority: { type: String, ref: 'Priority' }
});
或者这是否过度杀伤?我想避免的是将这些“描述”直接存储在主/整体模型中,然后在将来的某个时间更改需求。例如,有人决定而不是“中等”,我们需要“稍微”称它。在那种情况下,我认为我会被迫做某种数据迁移?
答案 0 :(得分:1)
你可以这样做:
var PrioritySchema = new Schema({
description: String
});
和这个
var AnotherSchema = new Schema({
name: String,
active: Boolean,
priority: { PrioritySchema }
});
但如果你想要你进一步描述的内容,我会建议你这样做:
var AnotherSchema = new Schema({
name: String,
active: Boolean,
priority: { type: Schema.Types.ObjectId, ref: 'Priority' } // see this : Schema.Types.ObjectId != String
});
如果您需要将这些值作为需要使用引用的跨文档,请让它变得简单。如果由于父文档而仅存在值,则可以选择嵌入。
欲了解更多信息,请阅读: http://mongoosejs.com/docs/2.7.x/docs/embedded-documents.html
仅供参考:我曾经为此苦苦挣扎。如果您遵循嵌入所有嵌套子文档的路径,您将面临很多"为什么我无法做到这一点:'(最后我选择了参考方式,我觉得更多与之相容。embing!= referencing。