【问题标题】:Finding the mongoDB object查找 mongoDB 对象
【发布时间】:2019-09-01 06:45:29
【问题描述】:

我有一个序列:[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”数组中具有三个匹配元素,即 ["k4 ","k6","k10"].

所以我想知道有 MongoDB 的方式吗?

【问题讨论】:

    标签: mongodb nosql nosql-aggregation


    【解决方案1】:

    你可以使用这个查询:

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

    这个查询将:

    • 过滤相关记录(非必要但效果更好)
    • 使用集合交集计算匹配元素的计数
    • 按计数降序排列
    • 返回第一条记录

    注意:最多可以有多个记录,上面的查询只能得到一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2016-03-05
      相关资源
      最近更新 更多