如何在Mongoose中查找数组字段不包含指定值的文档?
在Mongoose中查找数组不包含特定值的文档
其实MongoDB(包括Mongoose)里并没有$ncontains这种操作符,但我们可以用官方提供的现有操作符轻松实现你想要的效果,主要有两种常用方案:
方案一:直接使用$nin操作符
$nin(Not In)就是专门用来匹配字段值不在指定集合中的文档,完美对应你要的“数组不包含特定值x”的需求。针对你的list: {type:[String]}字段,查询代码如下:
M.findOne({ list: { $nin: [x] } })
这里只需要把要排除的特定值x放进一个数组里传给$nin,就能精准找到所有list数组中不包含x的文档。
方案二:用$not + $in组合实现取反
如果你更习惯用“反向思维”来写查询,也可以用$not配合$in来达到同样效果:
M.findOne({ list: { $not: { $in: [x] } } })
$in是用来匹配包含指定值的文档,加上$not就直接取反,得到不包含该值的文档集合。
额外补充:处理字段不存在的情况
如果你的list字段可能存在未定义或者为null的文档,上面两种方案会默认把这些文档也纳入结果。要是你只想查询**确实存在list数组且不包含x**的文档,可以额外加上$exists条件:
M.findOne({ list: { $exists: true, $nin: [x] } })
内容的提问来源于stack exchange,提问作者Chong Lip Phang
相关产品推荐
相关产品推荐

