MongoDB设计/重构
我有一个项目,这个项目的范围逐渐扩大 最初是一个跟踪校准工具的简单应用程序(每个工具都有一个年度轮换周期来检查校准),现在也变成了库存跟踪 因此,我当前的模型有一些必填字段和嵌入式校准文档:MongoDB设计/重构,mongodb,refactoring,Mongodb,Refactoring,我有一个项目,这个项目的范围逐渐扩大 最初是一个跟踪校准工具的简单应用程序(每个工具都有一个年度轮换周期来检查校准),现在也变成了库存跟踪 因此,我当前的模型有一些必填字段和嵌入式校准文档: { _id: ObjectId("51b0d94c3f72fb89c9000014"), barcode: "H-131887", calibrations: [ { _id: ObjectId("51b0d94c3f72fb89c9000015"), cal_d
{
_id: ObjectId("51b0d94c3f72fb89c9000014"),
barcode: "H-131887",
calibrations: [
{
_id: ObjectId("51b0d94c3f72fb89c9000015"),
cal_date: ISODate("2013-07-03T16:04:57.893Z"),
cal_date_due: ISODate("2013-07-03T16:04:57.894Z"),
ats_in: ISODate("2013-06-01T16:04:57.895Z"),
ats_out: ISODate("2013-06-06T16:04:57.897Z")
},
{
_id: ObjectId("51b0e6053f72fbb27900001b"),
cal_date: ISODate("2013-06-13T00:00:00Z"),
cal_date_due: ISODate("2014-06-13T00:00:00Z"),
ats_in: ISODate("2013-06-06T00:00:00Z"),
ats_out: ISODate("2013-06-17T00:00:00Z"),
updated_at: ISODate("2013-07-09T14:44:31.113Z"),
created_at: ISODate("2013-06-06T19:41:57.770Z")
}
],
created_at: ISODate("2013-06-06T18:47:40.481Z"),
creator_id: ObjectId("5170547c791e4b1a16000001"),
description: "",
group: "engine",
location: "Cabinet 1",
maker: "MITUTOYO",
model: "2046S",
serial: "QEL228",
status: "In",
tool: "Dial Indicator",
updated_at: ISODate("2013-07-09T14:44:31.103Z")
}
如果这些工具不需要条形码/序列号,那么在此模式中允许使用非校准工具的最佳方式是什么?此外,它们没有校准日期,因此我当前列出工具和最新校准日期的表不会乐意返回零校准…您不太可能需要重构数据库架构 MongoDB应该使用异构数据。这意味着并非同一集合中的所有文档都需要具有相同的字段。对于MongoDB来说,当一些文档有字段甚至子文档关于校准信息,而有些文档没有字段甚至子文档时,这一点都没有问题
当您有一个不应该返回没有校准信息的文档的查找查询时,您只需添加查找条件
calibrations:{$exists:true}
,并仅返回那些存在校准字段的文档。但即使是像find({“calibrations.cal_date_due”:{$lt:ISODate()})这样的查询
不会阻塞没有字段校准的文档,因此也不会阻塞校准。cal\u date\u due
也不会阻塞。它只会默默地跳过这些文档。您可能希望查看对文档子集中的任何字段使用稀疏索引,这些字段需要进行查询。请参阅非常有用!正在更新链接: