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
相关产品推荐
相关产品推荐

