gpt4 book ai didi

MongoDB 通过匹配子文档按相关性排序

转载 作者:可可西里 更新时间:2023-11-01 10:05:11 24 4
gpt4 key购买 nike

我有一个文档,必须根据其子文档中的值进行搜索并按相关性排序。

在研究这个主题时,我遇到了这个 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}}
)

第一个匹配项将匹配团队子文档至少匹配红色、蓝色和绿色中的一个的所有文档。第二场比赛将删除第一场比赛中包含的虚假子文档。

关于MongoDB 通过匹配子文档按相关性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com