MongoDB通过匹配子文档的相关性进行排序
问题描述:
我有一个文档,必须根据其子文档中的值进行搜索并按相关性排序。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
我将如何实现这一目标?
答
你可以尝试以下方法:
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}}
)
第一场比赛将匹配与团队子文档匹配的红色,蓝色和绿色的至少一个的所有文件。第二场比赛将删除第一场比赛中包含的虚假子文档。