查找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的方法?您可以使用以下查询:

我有一个序列:[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的方法?

您可以使用以下查询:

db.data.aggregate([{
    $match: {
        k: {
            $in: ["k1", "k4", "k6", "k10"]
        }
    }
}, {
    $addFields: {
        count: {
            $size:{
                $setIntersection: [
                    ["k1", "k4", "k6", "k10"], "$k"
                ]
            }
        }
    }
}, {
    $sort: {
        count: -1
    }
}, {
    $limit: 1
}])
此查询将:

  • 过滤相关记录(非必要但性能更好)
  • 使用集合交点计算匹配元素的计数
  • 按计数降序排列
  • 返回第一条记录
注意:可以有多个最大匹配项的记录,上面的查询只能得到一条