MongoDB匹配大多数数组元素

时间:2018-01-28 13:59:02

标签: mongodb

我有一个用例,我不确定它是否可以用任何合理有效的方式用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吗?

1 个答案:

答案 0 :(得分:3)

您可以在搜索数组与weeks数组之间计算每个顾问的权重setIntersection

db.consultants.aggregate([
    {
        $addFields: {
            weight: {
                $size: { $setIntersection: [ "$weeks", [1,2,4] ] }
            }
        }
    },
    { $sort: { weight: -1 } }
])

阵列中最长的周数匹配得越多,因此您可以按此权重字段进行$排序。