MongoDB通过匹配子文档按相关性排序
我有一个文档,必须根据其子文档中的值进行搜索,并按相关性排序 在研究这个话题时,我遇到了这个问题。我现在知道我必须使用聚合框架,但解决方案没有涵盖子文档 例如,我想抓取每个有teams.name子文档的文档['blue'、'red'、'green'],并根据它拥有的最匹配项进行排序MongoDB通过匹配子文档按相关性排序,mongodb,aggregation-framework,nosql,Mongodb,Aggregation Framework,Nosql,我有一个文档,必须根据其子文档中的值进行搜索,并按相关性排序 在研究这个话题时,我遇到了这个问题。我现在知道我必须使用聚合框架,但解决方案没有涵盖子文档 例如,我想抓取每个有teams.name子文档的文档['blue'、'red'、'green'],并根据它拥有的最匹配项进行排序 League Collection: { coach: Henderson, teams: [ { name: red, logo: bird, di
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
如何实现这一点?您可以尝试以下方法:
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}}
)
第一个匹配将匹配团队子文档至少匹配红色、蓝色和绿色之一的所有文档。第二个匹配将删除第一个匹配中包含的虚假子文档