3

我有一个项目,我有(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")
}

在这些工具不需要条形码/序列号的这种模式中,允许非校准工具的最佳方法是什么?此外,他们不会有校准日期,所以我当前列出工具和最近校准日期的表格不会很高兴返回零校准......

4

1 回答 1

3

您不太可能需要重构数据库模式。

MongoDB 应该可以处理异构数据。这意味着并非同一集合中的所有文档都需要具有相同的字段。当一些文档有关于校准信息的字段甚至子文档而一些没有时,对于MongoDB来说完全没有问题。

当您有一个不应该返回没有校准信息的文档的查找查询时,您可以添加查找条件calibrations: { $exists: true }并仅返回存在校准字段的那些文档。但即使是这样的查询find({"calibrations.cal_date_due":{$lt:ISODate()})也不会阻塞没有字段的文档,calibrations因此也没有calibrations.cal_date_due。它只会默默地跳过这些文档。

于 2013-08-01T14:54:04.363 回答