我有一个项目(ta daaa)的范围悄悄地在我身上。
一个简单的应用程序开始跟踪校准的工具(每个工具都有一个年度轮换周期来检查校准),现在也变成了库存跟踪。
所以我当前的模型有一些必需的字段和一个嵌入的校准文档:
{
_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()})
这样的查询也不会阻塞没有字段calibrations
的文档,因此也不会阻塞calibrations.cal_date_due
的文档。它会悄悄地跳过这些文档。