2013-08-01 3 views
1

나는 (ta-daaa) scope-crept가있는 프로젝트를 가지고있다.MongoDB 디자인/리팩토링

교정 된 도구를 추적하기위한 간단한 앱으로 시작한 것 (각 도구는 교정을 확인하기 위해 1 년주기주기가 있음)이 재고 추적으로 바뀌 었습니다.

그래서 내 현재의 모델은 일부 필수 필드 및 교정에 내장 된 문서를 가지고

{ 
    _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") 
} 

바코드/시리얼이 사람들을 위해 필요하지 않습니다이 스키마의 비 보정 툴을 허용하는 가장 좋은 방법이 될 것입니다 무엇 도구? 또한 교정 날짜가 없으므로 공구 및 최신 교정 날짜를 나열하는 현재 표가 무효 교정을 반환하지 않습니다.

답변

2

데이터베이스 스키마를 리팩터링해야 할 것 같지 않습니다. .

MongoDB는 이기종 데이터로 작업해야합니다. 즉, 동일한 콜렉션의 모든 문서가 동일한 필드를 가져야하는 것은 아닙니다. 어떤 문서가 교정 정보에 관한 필드와 심지어 하위 문서를 가지고있을 때 MongoDB에 대해서는 아무런 문제가 없습니다.

보정 정보가없는 문서를 반환하지 않아야하는 찾기 쿼리가있는 경우 찾기 조건 calibrations: { $exists: true }을 추가하고 교정 필드가있는 문서 만 반환하면됩니다. 그러나 find({"calibrations.cal_date_due":{$lt:ISODate()})과 같은 쿼리도 필드가 calibrations이 아니며 따라서 calibrations.cal_date_due이없는 문서를 질식시키지 않습니다. 이 문서는 자동으로 건너 뜁니다.

+3

문서의 하위 집합에 속하고 쿼리가 필요한 모든 필드에 스파 스 인덱스를 사용하는 것이 좋습니다. http://docs.mongodb.org/manual/core/indexes/#sparse-indexes –

+0

참으로보십시오! 스파 스가 유용합니다! 링크 업데이트 : http://docs.mongodb.org/manual/core/index-sparse/ – kroe