제품 컬렉션이 있습니다. 대부분의 제품에는 카테고리, 하위 카테고리 및 하위 카테고리가 있으며 일부 제품은 그 중 하나 또는 두 개만 있습니다. 저는 현재 그것들을 배열 필드 'category'에 저장하고 있는데, "book"유형의 제품에 대해서는 [ "독일", "문학", "소설"]처럼 보일 수 있습니다 (약 15 가지 유형이 있습니다. 자신의 카테고리 트리).
내가 원하는 것은 검색을 수행하는 것입니다. 아마도 10K 개의 일치 항목이 있고, 브라우저에 100을 반환하고, 쿼리에 대해 found-counts가있는 범주 목록을 제공 할 수도 있습니다. 카테고리가 무엇인지 미리 알지 못하고 변경 될 수도 있습니다.MongoDB 카테고리 집계 테이블
다른 방법으로 내가 찾고 있어요 :
- 맵리 듀스,하지만 난이 "느린"하고 내가 가진
- 한 가지 제안은 집계했다 라이브 검색보다는 매일 통계에 더 기어드 듣고 -> $ 그룹 : 이것을 보았습니다. 그러나 나는 그것들이 단순히 합산하거나 평균을내는 것 대신에 가치를 계산할 수있는 방법을 볼 수 없습니다. 나는 무엇인가 놓치고 있습니까? 커서의 각 범주에 대한 루프 검색을 단순히 반환 카운트()
- 는 모든 제품, 단지 카테고리 필드를 반환하는 두 번째 검색을 수행, 그래서 생산 코드
- 의 수를 할 수 있습니다. 이 작업을하려면 분명히 카테고리를 알아야하고 마지막 수단처럼 보일 것입니다.
기본적으로 내 질문은 "가장 좋은 방법은 무엇입니까?"라고 합리적으로 빠르고 배율이 높아야합니다. .
사용자가 카테고리를 클릭 한 후에도 동일하게 적용됩니다. 결과는 해당 카테고리의 하위 카테고리에 대해 집계되어야하며, 하위 카테고리가있는 경우 결과가 계산되어야합니다.
추가 정보 : 우리는 아직 데이터를 가지고 있지 않기 때문에 몇 백만 개의 제품을 가지고있을 것입니다. 그러나이 제품을 테스트하는 것은 어렵습니다. 현재 약 50K 제품 만이 미래 계획에 포함되어 있습니다. "제품"이외의 다른 데이터).
카테고리를 올바른 방식으로 저장하고 있거나 별도의 필드 여야합니까? 도움이 될까요? 현재 배열에 3 개의 항목이 있지만 나중에 증가 할 수 있습니다.
는 새로운 MongoDB를에 만 범주를 명확히 .. 지금까지 MySQL과
을 많이했다; "book"유형의 예제 제품의 경우 "german"이 주 카테고리이고 "literature"는 하위 카테고리이며 "novels"는 하위 카테고리입니다. 다른 주요 범주는 5-6 개의 다른 언어 (서적)이고 다른 하위 범주는 예 : "academic & study", "business"또는 "travel & languages"입니다. 하위 카테고리는 하위 카테고리에 따라 달라집니다 (마지막으로 SSC는 "외국어 학습", "사회 언어학"등이 될 수 있습니다). 나는 하나의 필드에 3 개를 모두 배열로서 제품 당 저장하고있다.
"book"유형에 대해 "foo"를 검색하면 영어 123 제품, 독일어 456 제품, 프랑스어 789 제품을 찾을 수 있습니다. 내가 원했던 것은 제품이 발견 된 모든 주요 (언어) 카테고리의 목록과 발견 된 제품의 수를 표시하는 것입니다.
누군가 "독일어"를 선택하면 다른 검색어를 사용하여 하위 카테고리 ("& 학문"의 44 개, "비즈니스"의 57 개)에서 발견 된 독일 도서의 수를 표시합니다.
나는 확실히 당신이 필요로 계산 어떤 데이터 구조가 무엇인지 이해하지 못하는 (업데이트 쿼리는 경우에 대비하여 카테고리는 배열이 아닌 하나의 문자열이다). ''독일인 ','문학 ','소설 ''은 나무의 길인가? 조금 더 자세히 설명해 주시겠습니까? – mnemosyn
나는 그것을 다소 분명히하려고 노력했다. 내 생각에 [[sub] 하위] 범주는 일종의 트리 구조로 볼 수 있지만이 컬렉션 (atm) 외부에 정의 된 범주는 아닙니다. – MSpreij
아직 지원되지 않는 $ group : { "_id": "$ category.0"}'이 필요하기 때문에 실제로는 가능하지 않습니다. https : //jira.mongodb.org/browse/SERVER-4589 – mnemosyn