MongoDB聚合查询中如何比较数组?现有$match匹配逻辑不生效如何解决?
MongoDB 聚合数组匹配错误修正方案
问题原因
你当前使用$ne操作符直接对比单个subUser字段值和blockedUsers映射生成的subUser数组,$ne只会对「subUser的值完全等于整个数组」的匹配结果取反,完全不符合「筛选出subUser不在禁用用户列表内」的需求,因此没有返回结果。
修正方案
场景1:文档中subUser为单个值类型
直接将$ne替换为$nin即可,$nin是MongoDB专门用于匹配「字段值不在指定数组范围内」的操作符,修正后代码如下:
{ $match: { subUser: { $nin: blockedUsers.map(bu => bu.subUser) } } }
如果需要反向匹配(筛选subUser在禁用列表内的文档),把$nin替换为$in即可。
场景2:文档中subUser为数组类型
如果需要排除subUser数组中包含任意禁用subUser的文档,使用如下写法:
{ $match: { subUser: { $not: { $elemMatch: { $in: blockedUsers.map(bu => bu.subUser) } } } } }
内容的提问来源于stack exchange,提问作者Faisal Jamil Khan
相关产品推荐
相关产品推荐

