2012-09-21 2 views
0

MongoDB에서 유형의 해시로 매핑을 사용하고 있는데 "meta_info"라는 이름의 키/값 목록 만 보유하고 있습니다. (Doctrine MongoDB Symfony 2.1에서 키/값 형식을 강화하는 해시 유형

<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [- remove row] 
<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [+ add row] 

나의 첫번째 아이디어는 두 개의 텍스트 필드 JS를 사용하여 복제 할 수 있습니다 (키/값을)하게했다 : (JS)와 함께 동적으로 향상 될 수 Symfony2의 형태는이 같은 (기본적으로) 찾아 보게합니다 그게 문제가 아니에요) 그리고 json 문자열로 변환 가져옵니다 제출 및 내 문서 클래스의 내 setter 메서드 내에서 배열로 다시 변환 ..하지만 이것은 다소 더러운 것 같습니다 ..

또한 포함 된 양식 (sf2.1의 임베디드 문서에서 매우 잘 작동합니다!)을 생각하고있었습니다. 그러나 간단한 키/값 해시 (이를 위해 다음과 같이 저장해야합니다. mongodb)

어떤 아이디어와 접근 방식을 주셔서 감사합니다!

답변

1

Symfony 양식과 관련하여 이것을 생각하면, 내부 양식의 동적 인 collection을 갖고 싶을 것입니다. 각각은 키와 값 입력 필드를 가지고 있습니다. 본질적으로 해시 필드를 사용하여 스키마의 모든 개념을 앞두고 있기 때문에 나는이 사례를 처리 할 다른 구현을 생각할 수 없다. 이것은 주로 MongoDB가 같은 방법 (중첩 된 객체)으로 저장하려고하더라도 ODM의 임베디드 문서 (매핑을 가질 것임)와이 케이스를 구별합니다.

하나의 다른 구현은 키와 값 속성을 포함하는 문서의 EmbedMany 관계를 갖는 것입니다. OpenSky는 이것을 내부적으로 사용하여 제품 속성을 나타냅니다. 대신 키/값 쌍의 단일 개체의 keyvalue 필드 객체의 배열을 가지고 이후는 MongoDB의 문서에서 조금 더 많은 스토리지를 소비하지만 분명한 장점이 있습니다 :

  • 구조 할 수는 매핑되어 기존 ODM 스키마와 잘 일치합니다.
  • 각 키/값 쌍에 대한 모델을 가지고 있기 때문에 Symfony 양식으로 이것을 표현하는 것이 더 자연 스럽습니다.
  • 가장 중요한 것은이 데이터로 쿼리하려는 경우 multi-key indexing을 사용하여 동적 키와 값을 인덱싱 한 다음 키/값 조회에 $elemMatch 쿼리를 사용할 수 있습니다. 동적 키가있는 해시 필드를 방금 사용하는 경우 여러 키를 인덱싱하는 간단한 방법이 없습니다. 각 개별 필드 경로에는 명시 적 인덱스 또는 복합 인덱스의 명시 적 언급이 필요합니다.
+0

나는 또한 key/value 속성을 가진 많은 문서를 embedding하려고 생각했다. – con