2012-06-17 13 views
1

이 형식으로 몽고 문서가 있습니다.지도가 몽고트로 축소됩니다

{"_id" : 1,"Summary" : {...},"Examples" : [{"_id" : 353,"CategoryId" : 4},{"_id" : 239,"CategoryId" : 28}, ... ]} 
{"_id" : 2,"Summary" : {...},"Examples" : [{"_id" : 312,"CategoryId" : 2},{"_id" : 121,"CategoryId" : 12}, ... ]} 

어떻게 같은 해시 얻을 수를 줄일지도/수 :

{ [ result[categoryId] : count_of_examples , .....] } 

을 즉 각 카테고리의 예 수. 나는 30 개의 카테고리를 가지고 있으며 모두 카테고리 콜렉션에 지정되어 있습니다.

+0

map/reduce를 사용해야합니까, 아니면 2.1까지 이동하고 집계 프레임 워크를 사용할 수 있습니까? –

+0

물론 map/reduce를 사용할 필요는 없습니다. 다른 방법이 있습니까? –

+0

2.1을 사용할 수 있으면 http://docs.mongodb.org/manual/applications/aggregation/ –

답변

1

당신은 다음 Aggregation Framework을 사용할 수 있습니다 2.1 (곧 출시 2.2 DEV 버전)를 사용할 수 있으며이 같은 보일 것이다 경우 : 첫 번째 단계는에 예의 서브 필드 (카테고리 ID를) 프로젝트

db.collection.aggregate([ 
     {$project:{"CatId":"$Examples.CategoryId","_id":0}}, 
     {$unwind:"$CatId"}, 
     {$group:{_id:"$CatId","num":{$sum:1} } }, 
     {$project:{CategoryId:"$_id",NumberOfExamples:"$num",_id:0 }} 
]); 

을 문서의 최상위 필드 (필요는 없지만 가독성을 높이는 데 도움이 됨)를 사용하면 CatId의 각 배열 값에 대해 별도의 문서를 만드는 예제 배열을 풀고 "그룹화 기준"을 수행하고 개수를 계산합니다. CategoryId는 한 가지 예입니다.) 마지막으로 필드의 라벨을 다시 지정하고 결과를 다음과 같이 표시합니다.

"result" : [ 
    { 
     "CategoryId" : 12, 
     "NumberOfExamples" : 1 
    }, 
    { 
     "CategoryId" : 2, 
     "NumberOfExamples" : 1 
    }, 
    { 
     "CategoryId" : 28, 
     "NumberOfExamples" : 1 
    }, 
    { 
     "CategoryId" : 4, 
     "NumberOfExamples" : 1 
    } 
], 
"ok" : 1 
+0

합계가 매우 흥미로울 수 없도록 예제 문서를 사용했습니다 ... –

+0

다른 질문은 몽고 이드에서 구현되는 방법입니다. –

+0

db.runCommand를 사용할 수 있으면 다음과 같이 사용할 수 있습니다. db.runCommand ({ "aggregate": "collectionName", "pipeline": []}) http://docs.mongodb.org/manual/reference/commands /#골재 –

관련 문제