查找mongoDB对象
我有一个序列:[k1,k4,k6,k10]和一个MongoDB对象如下:查找mongoDB对象,mongodb,nosql,nosql-aggregation,Mongodb,Nosql,Nosql Aggregation,我有一个序列:[k1,k4,k6,k10]和一个MongoDB对象如下:{u id:“x”,“k:[“k1”,“k2”,“k6”]},{u id:“y”,“k:[“k2”,“k4”,“k10”,“k11”]},{u id:“z”,“k:[“k4”,“k6”,“k10”,“k12”]} 我必须从数组中找到具有最大匹配元素数的特定对象。在这种情况下,它将是“z”,因为它在“k”数组I,e[“k4”、“k6”、“k10”]中有三个匹配元素 所以我想知道有没有MongoDB的方法?您可以使用以下查询:
{u id:“x”,“k:[“k1”,“k2”,“k6”]},{u id:“y”,“k:[“k2”,“k4”,“k10”,“k11”]},{u 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
}])
此查询将:
- 过滤相关记录(非必要但性能更好)
- 使用集合交点计算匹配元素的计数
- 按计数降序排列
- 返回第一条记录