2013-03-25 1 views
2

하위 문서의 값에 따라 검색하고 관련성별로 정렬해야하는 문서가 있습니다.MongoDB 하위 문서와 일치시켜 관련성별로 정렬

이 주제를 연구하는 동안 나는 question을 발견했습니다. 이제는 집계 프레임 워크를 사용해야한다는 것을 알았지 만이 솔루션은 하위 문서를 다루지 않았습니다.

예를 들어 teams.name [ 'blue', 'red', 'green']으로 하위 문서가있는 모든 문서를 가져 와서 가장 많은 일치 항목을 기준으로 정렬하고 싶다고합시다.

League Collection: 
{ 
    coach: Henderson, 
    teams: 
    [ 
    { 
     name: red, 
     logo: bird, 
     division: east 
    }, 
    { 
     name: blue, 
     logo: bluejay, 
     division: west 
    }, 
    { 
     name: green, 
     logo: monkey, 
     division: east 
    } 
] 
} 

{ 
    coach: Wilkins, 
    teams: 
    [ 
    { 
     name: red, 
     logo: bird, 
     division: east 
    }, 
    { 
     name: blue, 
     logo: bluejay, 
     division: west 
    }, 
] 
} 

{ 
    coach: Sandy, 
    teams: 
    [ 
    { 
     name: red, 
     logo: bird, 
     division: east 
    } 
] 
} 

최종 결과는 다음과 같습니다

item   total matches 
--------  -------------- 
Henderson  3 
Wilkins  2 
Sandy   1 

내가 이것을 어떻게 달성 할 것인가?

답변

3

는 다음을 시도 할 수 있습니다 :

db.league.aggregate(
    {$match:{'teams.name':{$in:['red','blue','green']}}}, 
    {$unwind:'$teams'}, 
    {$match:{'teams.name':{$in:['red','blue','green']}}}, 
    {$project:{'item':'$coach','teams':1}}, 
    {$group:{_id:'$item',total:{$sum:1}}}, 
    {$sort:{total:-1}} 
) 

첫 번째 경기는 빨간색, 파란색과 녹색 중 적어도 하나와 일치하는 팀 하위 문서의 모든 문서와 일치합니다. 두 번째 일치 항목은 첫 번째 일치 항목에 포함 된 가짜 하위 문서를 제거합니다.

관련 문제