MongoDB如何实现多条件查询?需同时排除Stopped和Completed状态
解决MongoDB同时排除多个状态的查询问题
嘿,这个坑我之前也踩过!你现在的写法之所以只生效最后一个排除条件,是因为你连续给query.status赋值——后面的对象直接覆盖了前面的,相当于最终查询条件只剩下{ status: { $ne: "Completed" } },自然没法同时排除两个状态。
给你两种靠谱的解决方案:
方案1:使用$nin操作符(推荐,更简洁)
$nin(Not In)专门用来匹配字段值不在指定数组中的文档,完美适配你要排除多个状态的需求:
var query = { }; query.status = { $nin: ["Stopped", "Completed"] };
这样写一行就能同时排除"Stopped"和"Completed"两种状态,清晰又高效。
方案2:使用$and操作符(适合复杂逻辑扩展)
如果之后需要搭配其他复杂查询条件,可以用$and把多个$ne条件组合起来,确保所有条件同时生效:
var query = { $and: [ { status: { $ne: "Stopped" } }, { status: { $ne: "Completed" } } ] };
这里要注意,千万别像你原来那样直接在同一个status键下重复赋值,因为对象的相同键会被覆盖,必须通过$and来明确声明逻辑与的关系。
两种方法都能解决你的问题,个人更推荐第一种,代码更简洁易读~
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

