개체 배열 및 개체에 대한 Mongo 인덱싱
저는 많은 필드를 처리하는 연락처 데이터베이스를 구현하고 있습니다.대부분은 사전 정의되어 있으며 바인딩된 것으로 간주할 수 있지만 그렇지 않은 몇 가지가 있습니다.이러한 필드 중 하나를 '그룹'이라고 합니다.현재 구현 방법은 다음과 같습니다(각 문서/연락처에 '그룹' 필드가 있음).
'groups' : {
152 : 'hi',
111 : 'group2'
}
하지만 책을 좀 읽고 나면 제가 해야 할 것 같습니다.
'groups' : [
{ 'id' : 152, 'name' : 'hi' },
{ 'id' : 111, 'name' : 'group2' }
...
]
그런 다음 인덱스를 적용합니다.db.contact.ensureIndex({'groups.id':1});
제 질문은 기능성에 관한 것입니다.두 구조 사이의 차이점은 무엇이며 인덱스가 실제로 구축되는 방법입니다(단순히 각 문서/연락처 내에서 인덱싱하는 것입니까, 아니면 모든 문서/연락처의 모든 그룹을 포함하는 전체 인덱스를 구축하는 것입니까?).
구조적으로 이것이 최선의 방법이라는 가정하에 들어가려 합니다만, 제가 틀렸다면 알려주십시오.
두 번째 경우에는 쿼리가 훨씬 쉬워집니다. 여기서 'groups'는 각각 'id'와 'name'을 가진 하위 문서의 배열입니다.
Mongo는 "wildcard" 쿼리를 지원하지 않으므로 문서가 첫 번째 방식으로 구성되어 있고 "hi" 값을 가진 하위 문서를 찾으려 했지만 키가 152인 것을 알지 못했다면 이 작업을 수행할 수 없습니다.두 번째 문서 구조를 사용하면 {groups.name }:"hi"}에 대해 쉽게 쿼리할 수 있습니다.
포함된 개체 쿼리에 대한 자세한 내용은 "도트 표기법(개체에 도달)" http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 문서를 참조하십시오. "고급 쿼리" 문서의 "배열의 값" 및 "포함된 개체의 값" 섹션도 유용합니다.http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
{'groups.id ':1}의 인덱스에 대해 모든 문서의 모든 "그룹" 배열에 있는 모든 "ID" 키에 대한 인덱스 항목이 생성됩니다.색인이 "그룹"에 있는 경우, 문서당 하나의 색인 항목만 작성됩니다.
두 번째 유형의 문서와 그룹에 대한 색인이 있는 경우, 색인을 사용하려면 쿼리가 전체 하위 문서와 일치해야 합니다.예를 들어, 문서가 주어지면 다음과 같습니다.
{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }
쿼리
db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }})
인덱스를 사용하지만 쿼리는
db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})
또는
db.<collectionName>.find({"groups.name":"hi"})
하지 않을 것이다.
작성하는 인덱스는 가장 일반적으로 수행할 쿼리에 따라 달라집니다.
.explain() 명령을 사용하여 쿼리가 사용 중인 인덱스(있는 경우)를 실험할 수 있습니다.http://www.mongodb.org/display/DOCS/Explain 첫 번째 줄인 "filename"은 사용 중인 인덱스를 알려줍니다."cursor" : "BasicCursor"는 전체 수집 검색이 수행되고 있음을 나타냅니다.
인덱싱에 대한 자세한 내용은 다음 문서를 참조하십시오. http://www.mongodb.org/display/DOCS/Indexes
위의 "Indexing Array Elements" 섹션은 "Multikeys"라는 제목의 문서로 링크됩니다. http://www.mongodb.org/display/DOCS/Multikeys
이렇게 하면 내장된 문서에 대한 쿼리 방법과 인덱스가 사용되는 방법에 대한 이해가 향상되기를 바랍니다.후속 질문이 있으면 알려주세요!
언급URL : https://stackoverflow.com/questions/9589856/mongo-indexing-on-object-arrays-vs-objects
'programing' 카테고리의 다른 글
서블릿 컨테이너가 내장되지 않은 스프링 부트 (0) | 2023.06.23 |
---|---|
스프링 부트를 사용하여 mongodb에 대한 자동 생성 필드를 생성하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
PHP / MongogeoJSON 루프가 잘못되었습니다. (0) | 2023.06.23 |
신뢰할 수 있는 연결이란? (0) | 2023.06.23 |
데이터에 대한 Spring Boot 데이터 원본 초기화 오류가 발생했습니다.2.5.0 업그레이드 후 sql 스크립트 (0) | 2023.06.23 |