You need to enable JavaScript to run this app. MongoDB如何查询数组与给定列表交集元素不少于3个的文档
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB如何查询数组与给定列表交集元素不少于3个的文档

MongoDB查询数组交集元素数量≥指定值的实现方案

核心实现逻辑:利用MongoDB的集合运算函数计算两个数组的公共元素数量,再筛选符合要求的文档即可。

你用到的参考数组:

let list = [ "cake", "apple", "banana", "flour", "orange", "pasta", "tomato" ]

最简实现(推荐,MongoDB 3.6+支持)

直接在$match阶段使用$expr完成计算和筛选,不需要额外字段处理,把代码里的yourCollectionName替换为你实际的集合名称即可:

db.yourCollectionName.aggregate([
  {
    $match: {
      $expr: {
        $gte: [
          // 计算food数组和list的交集长度
          { $size: { $setIntersection: [ "$food", list ] } },
          3 // 要求共同元素至少3个
        ]
      }
    }
  }
])

兼容旧版本实现

如果使用的MongoDB版本低于3.6不支持$expr,可以先新增计数临时字段再筛选:

db.yourCollectionName.aggregate([
  // 新增公共元素数量字段
  {
    $addFields: {
      commonFoodCount: { $size: { $setIntersection: [ "$food", list ] } }
    }
  },
  // 筛选符合条件的文档
  {
    $match: {
      commonFoodCount: { $gte: 3 }
    }
  },
  // 移除临时字段,返回原始文档结构
  {
    $project: {
      commonFoodCount: 0
    }
  }
])

两种写法都会返回你预期的结果:

{ food: [ "cake", "tomato", "coffee", "flour" ] }
{ food: [ "cake", "banana", "orange", "flour" ] }

内容的提问来源于stack exchange,提问作者Marco Ceccon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 12:54:00