MongoDB聚合如何按eligibleProducts交集过滤offers数组元素
MongoDB按数组交集规则过滤内嵌offers数组的实现方案
核心实现逻辑
使用$setIntersection操作符计算两个数组的交集,再判断交集长度是否大于0,即可满足「只要存在任意交集就匹配」的需求。
正确聚合语句
{ "$project": { // 可根据你的聚合阶段需求调整,此处以project为例输出过滤后的offers "offers": { "$filter": { "input": "$offers", "as": "offer", "cond": { "$gt": [ { "$size": { "$setIntersection": [ [111, 777, 888], "$$offer.eligibleProducts" ] } }, 0 ] } } } } }
逻辑说明
$setIntersection接收两个数组参数,返回两个数组的公共元素组成的新数组,无公共元素时返回空数组$size用于获取交集数组的长度,只要长度大于0就说明两个数组存在交集,符合过滤条件
注意事项
- 字段名大小写需要和实际文档保持一致,示例文档中的内嵌数组字段为小写
offers,如果你的实际字段为大写Offers可对应调整 $setIntersection会自动对数组元素去重后计算交集,数组内存在重复元素不会影响判断结果
内容的提问来源于stack exchange,提问作者phani
相关产品推荐
相关产品推荐

