建议选择以下2种MongoDB设计选项中的哪一种



我有两个模型:SupplierSupplier 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字段,单个光标将返回所有相关供应商。

如果项目数很大,请对任一字段应用索引以提高性能。

最新更新