MongoDB条件运算符
MongoDB 条件运算符详解与实战应用
一、比较运算符核心要点
-
基础比较运算符
• 等于($eq)
支持隐式写法{age: 33}或显式{age: {$eq: 33}},适用于精确匹配场景(如查询年龄为33的用户)
• 范围运算符($lt/$lte/$gt/$gte)
支持数值、日期等可比较类型,常用于区间过滤(如查询年龄>33且<35的用户)// 查询年龄在33-35岁之间的用户(包含33和35) db.users.find({age: {$gte: 33, $lte: 35}}) -
集合匹配运算符
• $in/$nin
用于多值匹配或排除,比多次$or查询更高效(如筛选特定年龄段用户)// 查询年龄为32、33或34岁的用户 db.users.find({age: {$in: [32,33,34]}}) -
字段存在性处理
当文档缺少目标字段时,所有比较运算符默认过滤该文档。需结合$exists判断字段是否存在(如查询无年龄字段的用户)// 查询未填写年龄的用户(需显式判断) db.users.find({age: {$exists: false}})
二、逻辑运算符高级用法
-
逻辑组合操作
• 隐式AND
多个条件直接并列即表示AND关系(如同时满足年龄>33和子年龄<5)db.users.find({age: {$gt:33}, "child.age": {$lt:5}})• 显式$or
需通过数组声明多个独立条件(如查询年龄为33或36的用户)db.users.find({$or: [{age:33}, {age:36}]}) -
复杂逻辑嵌套
支持多层级AND/OR组合,需注意括号优先级(如复合班级和性别条件)// 查询(班级301且男生)或(班级302且女生) db.users.find({ $or: [ {$and: [{class:301}, {sex:true}]}, {$and: [{class:302}, {sex:false}]} ] }) -
否定操作符$not
用于反转条件逻辑,常与正则表达式结合使用(如排除特定格式用户名)// 查询用户名不以"lao"开头的用户 db.users.find({name: {$not: /^lao/}})
三、实战注意事项
-
嵌套字段查询
使用点号访问子文档字段(如查询子年龄小于5的用户)db.users.find({"child.age": {$lt:5}}) -
空值处理差异
{age: {$ne:33}}会包含age=null的文档,需配合$exists精确过滤// 排除年龄为33且存在年龄字段的用户 db.users.find({age: {$ne:33, $exists:true}}) -
性能优化建议
• 优先使用$in代替多个$or条件
• 对高频查询字段创建索引(如年龄字段索引)
• 避免在$where中使用复杂JavaScript表达式
通过合理组合条件运算符,可实现从简单过滤到复杂业务逻辑的完整查询能力。建议结合
explain()方法分析查询执行计划,持续优化性能。

浙公网安备 33010602011771号