2017-03-07 1 views
0

mongo 문서의 배열에 티켓 세부 정보를 저장하고 싶습니다. 문서 크기가 16MB에 도달 할 때까지 작동합니다. 예외가 발생하면 (업데이트 후 결과 문서가 16777216보다 큽니다) 프로그램이 갑자기 종료됩니다. 나는이 문서를 분할 할 수 없다. 모든 티켓 세부 사항은 2016 년에 기록된다.몽고 문서에서 BSON 문서 크기가 16MB를 초과합니다

여기 내 문서 구조가있다.

{ 
    year:2016, 
    purpose: ticketdetail, 
    tickets:[ 
    {ticketid:001, desc:"xyz", created:20161231}, 
    {ticketid:002, desc:"xyz", created:20161231}, 
    {ticketid:003, desc:"xyz", created:20161231}, 
    ....... 
    ....... 
    {ticketid:00N, desc:"xyz", created:20161231}, 
    }]  
} 
+0

당신은 아니, 매달 문서로 2016 문서를 분할 할 수 있습니다? – Veeram

+0

@Veeram : 이것은 매년 해당 데이터에 해당하는 티켓을 저장하는 연간 데이터입니다. 월간 및 매일 데이터와 동일한 것입니다. 문서를 분할하지 않고 어떤 아이디어? – Dickson

+0

@Dickson 당신은 그냥 어떻게 든 문서를 분할해야합니다. 16MB 제한은 현재는 선택 사항이 아닙니다. –

답변

0

당신은 아마 다른 컬렉션, 별도의 문서로 문서를 분할해야합니다. 아니요은 GridFS blob 내의 데이터를 쿼리 할 수 ​​없으므로 GridFS를 사용하는 것이 좋습니다. 이 구조에

{ 
    _id: ObjectId("85bf0ef0b9692c0010978359"), 
    "ticketid" : "001", 
    "desc" : "xyz", 
    "created" : ISODate("2016-12-31T00:00:00.000Z") 
} 
, 
{ 
    _id: ObjectId("85bed4257726f90010d4e21f"), 
    "ticketid" : "002", 
    "desc" : "xyz", 
    "created" : ISODate("2016-12-31T00:00:00.000Z") 
} 

참고 : 여기에

는 제안 문서 구조

  1. 각 티켓은 다른 문서에 - 수에 제한이 없기 때문에 이것은, 그것은 확장한다 컬렉션에있는 문서 중.
  2. "만든"필드가 이제는 적절한 날짜 필드에 있습니다. 이렇게하면보다 정확한 쿼리 기능이 제공됩니다.
  3. 원본 문서가 2016 년의 모든 티켓을 저장해야한다고 말했습니다.이 새 컬렉션에 대한 적절한 쿼리를 통해 2016 년의 모든 티켓이 반환되므로 이 아니므로을 모두 하나의 문서에 저장해야합니다.
db.tickets.find({ 
    "created" : { 
      $gte: ISODate("2016-01-01"), 
      $lt: ISODate("2017-01-01") 
     } 
    } 
}); 
+0

감사합니다. 내 문서를 분할 했으므로 이제는 괜찮습니다! – Dickson

+0

안녕하세요 @ 딕슨, 그리고 당신이 내 대답을 찾았 기 때문에 다행입니다. 유용한 답변을 upvote 및/또는 수락하는 것을 잊지 마십시오. –

관련 문제