2013-03-25 3 views
2

У меня есть документ, который нужно искать в соответствии со значением в его вложенном документе и сортироваться по релевантности.MongoDB Сортировка по релевантности по поддоменам

Изучая эту тему, я наткнулся на это question. Теперь я знаю, что мне нужно использовать структуру агрегации, но решение не охватывало поддокументы.

Например, я хотел захватить каждый документ, у которого были поддоны с командами. «[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}} 
) 

Первый матч будет соответствовать всем документам с командой поддокументами, соответствующих по меньшей мере, один из красного, синего и зеленого цвета. Во втором матче будут удалены ложные поддокументы, которые были включены в первое совпадение.

 Смежные вопросы

  • Нет связанных вопросов^_^