我有一个用例,我不确定它是否可以用任何合理有效的方式用MongoDB解决。
数据库包含顾问,顾问有一组可用的周数(周数列表)。
我现在想要对具有给定周数的最佳匹配重叠的顾问进行过滤。
e.g。顾问:
{
_id: ....
name: "James",
weeks: [1,2,3,4,8,9,13]
}
{
_id: ....
name: "Anna",
weeks: [2,3,4,20,23]
}
搜索数据:[1,2,4]
重叠越多,我想在搜索结果中对顾问进行排名越高。
詹姆斯匹配所有三个条目,1,2,4。安娜比赛2,4
甚至可以使用Mongo吗?
答案 0 :(得分:3)
您可以在搜索数组与weeks
数组之间计算每个顾问的权重setIntersection:
db.consultants.aggregate([
{
$addFields: {
weight: {
$size: { $setIntersection: [ "$weeks", [1,2,4] ] }
}
}
},
{ $sort: { weight: -1 } }
])
阵列中最长的周数匹配得越多,因此您可以按此权重字段进行$排序。