我有两个模型:Supplier
和Supplier type
。客户端应该能够检索属于特定Supplier Type
:的所有Suppliers
Supplier
:
name: {
type: String,
required: true,
minlength: 2,
maxlength: 255,
},
...
supplier_type: { type: ObjectId, ref: 'SupplierType' },
}
SupplierType
:
name: {
type: String,
required: true,
minlength: 2,
maxlength: 50,
},
suppliers: [{ type: ObjectId, ref: 'Supplier' }],
};
设计1:
Supplier
上的字段包含对指定的Supplier Type
对象的引用Supplier Type
对象上的数组包含对所有具有"供应商类型"的Suppliers
的对象引用- 客户端查询相关的
Supplier Type
文档,比方说Vegetables
,并且包含在响应中,以及其他字段中,将是Suppliers
的列表
使用这种方法,每次保存新的Supplier时,至少需要一个其他DB操作来更新Supplier Type
对象上的Suppliers
数组。
设计2:
- 从
Supplier Type
对象中删除Suppliers
引用数组 Supplier
上的字段包含对指定的Supplier Type
对象的引用,如设计1中所示- 此时,客户端使用指定
Supplier Type
的参数查询Supplier
文档,即GET/suppliers?supplier-type=Vegetables
在MongoDB中,哪种设计最有意义/会是推荐的方法?
我认为没有理由将这两个对象拆分为单独的集合。将SupplierType
嵌入到Supplier
对象中。如果一个Supplier
可以是多个SupplyType
,则可以将该对象扩展到一个数组中。
现在,当您获得任何Supplier
时,您将自动获得它们的SupplierType
,而不需要联接和/或第二个查询。
想通过SupplyType
找到所有的Supplier
文档吗?查询SupplyType
字段,单个光标将返回所有相关供应商。
如果项目数很大,请对任一字段应用索引以提高性能。