2011-03-09 3 views
0

mongodb에 해시 값을 저장하고 싶습니다.mongodb 컬렉션에 많은 키를 넣을 수 있습니까?

두 가지 수집, 사람 및 작업 있습니다. 사람은 수량이있는 작품이 있습니다. 다른 컬렉션의 작업 저장 공간에 대한 자세한 정보 (다른 컬렉션 참조 가능).

예 : 사람 (짐)은 한 작품 (a)과 세 작품 (b)를 가지고 있습니다.

// Person 
{ 
    _id: "4d772583c186233352000001" 
    name: "Jim" 
    works: { 
     "4d772583c186233352000002": 1 
     "4d772583c186233352000003": 3 
     ... 
    } 
} 

// Work 
{ 
    _id: "4d772583c186233352000002" 
    title: "Make cake" 
    finished_at: ... 
} 
{ 
    _id: "4d772583c186233352000003" 
    title: "Make iPhone" 
    finished_at: ... 
} 
... 

위와 같은 사람의 저작물을 저장하는 경우. 사람 키 경로는 저작물의 ID를 포함하고 반복해서 증가합니다. 이게 옳은가?

+0

리치 웹 프로젝트에서. 우리는 서버에서 클라이언트로 데이터를 직렬화해야합니다. 첫 번째 데이터 스타일은 사전이 될 것입니다. 그렇지 않으면 배열과 사전을 처리해야합니다. – colder

답변

1

여기 실제 질문을 이해할 수 있는지 확실하지 않습니다. 스키마 디자인에 대한 또 다른 의견을 묻는 중입니까? 그렇다면 여기 내 것이 있습니다 :

문서 ID를 사용하여 컬렉션간에 관계를 유지하는 데는 아무런 문제가 없습니다. 때때로 mongoDB가 도움을 줄 수 없기 때문에 관계/참조를 유지하는 책임을 져야 할 필요가 있더라도 가끔씩은 올바른 (그리고 유일한) 방법입니다.

위의 샘플 스키마를 살펴봄으로써 유스 케이스를 이해하기는 다소 어렵지만 내 눈을 사로 잡는 것은 작업 객체입니다.

난 당신이 배열을 사용하여 더 나을 것 같아요 - 아마 다음과 같이 :

works: [ 
     { "4d772583c186233352000002": 1 }, 
     { "4d772583c186233352000003": 3 } 
] 

당신은 예를 들어 $ 풀과 $ 푸시를 사용하여 참조를 유지 몽고에서 더 나은 지원을해야합니다 그 방법 연산자.

하지만 외래 참조를 작업 참조 개체의 키로 사용하는 것에 대해서도 궁금합니다. 더 관용적 인 객체의 경우 다음을 고려하십시오.

works : [ 
    { work_id: "4d772583c186233352000002", quantity: 1 }, 
    { work_id: "4d772583c186233352000003", quantity: 3 } 
] 

도움이 되셨습니까?

+0

키가 변경 될 염려가 있습니다. 데이터가 큰 경우. 몽고 벳은 천천히 갈 것입니까? 색인 생성 방법을 이미지로 표현할 수 없습니다. – colder

+0

키가 변경 가능하다는 것이 무슨 뜻인지 이해할 수 없습니다. 분명히, 더 많은 데이터를 입력할수록 더 느린 몽고가 될 것입니다. 그러나 매우 구체적인 성능 요구 사항이없는 한 눈에 띄기 전에 이러한 유형의 문서를 매우 많이 가질 수 있습니다. 쿼리에서 인덱스를 사용하는지 확인하십시오. 색인에 대해, 특정 저작에 대한 참조를 보유하고있는 사람을 질의하고 싶다면 "works.works_id", "db.persons.ensureIndex"에 색인을 추가하여 쉽게 할 수 있습니다 ({ "works.works_id": 1})' – svjson

관련 문제