查找数组中匹配次数最多(不匹配次数更少)的文档

凯罗斯

考虑到我有以下文件(不包括_id):

[
  {
    "array": [
      1,
      2,
      3,
      4
    ],
    "string": "doc1"
  },
  {
    "array": [
      3,
      4,
      5
    ],
    "string": "doc2"
  }
]

与相比,我想找到在“数组”中具有最常见元素的文档[2,3,4]返回的文件应为:

{
    "array": [
      1,
      2,
      3,
      4
    ],
    "string": "doc1"
}

(3场比赛)

但是,如果搜索是[3,4,6]返回的文档,则应为:

{
    "array": [
      3,
      4,
      5
    ],
    "string": "doc2"
  }

因为两者共享相同的匹配数(2),但是返回的文档包含较少的不匹配元素(1个元素与另一个文档上的2个元素相比)。

如何完成查找查询数组与文档数组的“最佳”交集的查询?

米克尔

您可以使用$ setIntersection运算符来计算新数组,并根据其大小以及的大小来计算过滤器array

db.collection.aggregate([
    {
        $addFields: {
            size: { $size: "$array" },
            intersectionSize: { $size: { $setIntersection: [ [2,3,4], "$array" ] } }
        }
    },
    {
        $sort: {
            intersectionSize: -1,
            size: 1
        }
    },
    {
        $limit: 1
    },
    {
        $project: {
            size: 0,
            intersectionSize: 0
        }
    }
])

蒙哥游乐场(1)

蒙哥游乐场(2)

编辑:按大小升序排序是必要的,因为如果存在相同数量的匹配元素,则较短的数组将被提升

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找数组中重复次数最多的算法

如何使用MODE来获得匹配次数最多的号码

查找数组中出现次数最多的数字

查找数组中出现次数最多的相同数字

Python 查找列表中“获胜”次数最多的玩家

在“球拍”列表中查找出现次数最多的元素

查找矩阵中重复次数最多的行

python查找报告次数最多的月份

查找对战次数最多的球队

如何打开给定正则表达式匹配次数最多的文件?

如何选择关键字匹配次数最多的字符串?

SQL查询以查找不嵌套的表中出现次数最多的值

ruby:查找数组中出现次数最多的项目,如果有

LINQ查询以查找重复次数最多的多维数组的字符串

查找序言规则集中出现次数最多的情况

查找列表中出现次数最多的数字

查找某年获奖次数最多的电影-代码重复

查找每个组中出现次数最多的条目

查找数据框中出现次数最多的列

查找添加次数最多的合作伙伴

查找没有地图的重复次数最多的整数

查找字符串中重复次数最多的单词

查找哪个字符出现在字符串中的次数最多

查找子字符串在字符串中连续出现的次数最多

使用powershell在.txt文件中查找出现次数最多的字符串

查找字母中每个字母出现次数最多的单词

在 ArrayList 中查找出现次数最多的字符串

获取数组中重复次数最多的元素,如果重复次数最多,请按字母顺序依次获取结果

获取数组中出现次数最多的元素