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()})持たないドキュメントを詰まらせることはありません。これらのドキュメントを黙ってスキップします。calibrationscalibrations.cal_date_due

于 2013-08-01T14:54:04.363 に答える