在mongoose.js中共享和重用模式部分的策略

时间:2014-12-19 17:38:47

标签: database node.js mongoose schema

假设我有两个模式,例如适用于personcompany。它们都应该有address,其中包含street namenumberzipcity

避免在两个模式定义之间复制address属性的策略是什么?我读到了sub docs,但它们似乎(1)与一个父模式绑定,(2)总是出现在数组中。

2 个答案:

答案 0 :(得分:13)

几乎太明显了,但这是我最终提出来的:

分别定义可重用部分,但与我的第一个想法相反: not 在这里使用Schema

var addressSubschema = {
    street: String, number: String, zip: String, city: String
}

只需将此部分包含在实际模式中:

var personSchema = new mongoose.Schema({
    name: { type: String, required: true },
    title: { type: String },
    address: addressSubschema
});
var companySchema = new mongoose.Schema({
    name: { type: String, required: true },
    addresses: [addressSubschema]
});

答案 1 :(得分:0)

我的(天真?)方法可能是为地址创建一个新的模式,并使用Mongoose的population机制通过ObjectID链接到给定的地址。但是,这基本上模拟了关系数据库行为,而且我不确定使用像Mongo这样的平面文件存储时的PC是什么。