필드가 문서에 동적으로 추가되는 MongoDB 컬렉션 스키마가 있습니다. 동적으로 추가 된 필드가있는 문서를 검색 할 때 쿼리가 매우 느립니다. 샘플 문서는 다음과 같이 :MongoDB에서 동적으로 추가 된 필드에 인덱스 생성
{
"_id" : ObjectId("4657439ad7f616df3f49"),
"name" : "test1",
"created_at" : ISODate("2014-06-13T10:48:41.501Z"),
"Status" : "NEW",
"email":"[email protected]",
"rank":1278
}
필드 이름, 이메일, 순위는 동적으로 사용자가 생성하고 문서에 추가됩니다. 응답하기에 매우 오랜 시간이 걸리는 이러한 필드를 사용하여 쿼리합니다. 자연 및 필드 자체가 동적으로 추가되기 때문에 이러한 필드에 인덱스가 작성되지 않습니다. 여기() .explain 시도 출력했다 :
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1683063,
"nscanned" : 1683063,
"nscannedObjectsAllPlans" : 1683063,
"nscannedAllPlans" : 1683063,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 4,
"nChunkSkips" : 0,
"millis" : 1708,
"indexBounds" : {
}
이 명확하게 인덱싱을 할 필요가 있음을 보여줍니다. 그러나 이러한 비 결정적 필드에 인덱스를 작성하는 방법에 대한 단서가 없습니다. 참고 * :이 문서에는 here과 같이 포함 된 문서가 없습니다. 나는 MongoDB를 처음 사용한다.
동적으로 추가 될 때까지 알 수없는 경우 제출 된 '이름'에 대한 색인을 어떻게 추가 할 수 있습니까? – Astro
음 ... 자동화를 찾고 사용자가 필드를 추가 할 수 있다면 검색중인 각 필드에 대한 쿼리를 실행하기 전에 인덱스를 확인할 수 있습니다. 처음으로, ensureIndex 명령은 아무 효과가 없으며 반복해도 무방합니다. 이것은 물론 N 개의 인덱스가있는 컬렉션으로 이어질 수 있습니다. 그것은 상쇄 관계에 있습니다. – amenadiel