我有一个序列:[k1,k4,k6,k10]和一个MongoDB对象,如下所示:{"_id" : "x" , "k" : [ "k1", "k2 ","k6"]},{"_id" : "y" , "k" : [ "k2", "k4 ","k10","k11"]},{"_id" : "z" , "k" : [ "k4", "k6 ","k10","k12"]}
我必须从数组中找到具有最大匹配元素数量的特定对象。在这种情况下,它将是"z",因为它在"k"数组i,e ["k4","k6","k10"]中有三个匹配的元素。
所以我想知道有没有MongoDB的方法?
您可以使用此查询:
db.data.aggregate([{
$match: {
k: {
$in: ["k1", "k4", "k6", "k10"]
}
}
}, {
$addFields: {
count: {
$size:{
$setIntersection: [
["k1", "k4", "k6", "k10"], "$k"
]
}
}
}
}, {
$sort: {
count: -1
}
}, {
$limit: 1
}])
此查询将:
- 过滤相关记录(不必要的,但性能更好(
- 使用设置交集计算匹配元素的计数
- 按计数降序排序
- 返回第一条记录
注意:可以有多个具有最大匹配项的记录,上面的查询只能获得一个。