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

Posted

技术标签:

【中文标题】mongoose.js 中模式部分的共享和重用策略【英文标题】:Strategy for sharing and reusing of schema parts in mongoose.js 【发布时间】:2015-02-18 16:35:24 【问题描述】:

假设,我有两个模式,例如对于personcompany。它们都应该有一个address,它由street namenumberzipcity组成。

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

【问题讨论】:

看起来像是昨天这个问题的傻瓜:***.com/questions/27553941/… 【参考方案1】:

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

但是,与我最初的想法相反,单独定义可重用部分:不要在此处使用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]
);

【讨论】:

如果需要其中一些部件怎么办? 你放了一个required: true,就像例子中一样。【参考方案2】:

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

【讨论】:

如果您希望我更深入地解释人口,请告诉我,我会编辑我的答案。 谢谢你的建议,但那是我原本想避免的(因为你给出的原因:))。

以上是关于mongoose.js 中模式部分的共享和重用策略的主要内容,如果未能解决你的问题,请参考以下文章

JAVA多线程模式-Work Thread和阶段总结

设计模式之策略模式在地铁票价系统中的应用

享元模式

设计模式之享元模式

Java设计模式:Flyweight(享元)模式

设计模式-享元模式