MongoDB中的其他运算符以及相关查询操作
一、数据类型与存在性运算符
-
$type
类型匹配
• 功能:筛选指定字段为特定数据类型的文档
• 支持类型:
◦ 数值型(number
/double
/int
)、字符串(string
)、布尔(bool
)
◦ 对象(object
)、数组(array
)、日期(date
)等
• 示例:// 查询 age 字段为字符串类型的文档 db.users.find({"age": {$type: "string"}})
-
$exists
字段存在性检测
• 用途:过滤包含/不包含指定字段的文档
• 注意:空值字段null
会被认为存在
• 示例:// 查找有 child 字段的家长数据 db.users.find({"child": {$exists: true}})
二、正则与数学运算符
-
$regex
正则表达式
• 语法:支持两种写法(等效)db.users.find({"mobile": /^133\d{8}$/}) // 直接使用正则对象 db.users.find({"mobile": {$regex: /^133/, $options: "i"}}) // 带修饰符
• 修饰符:
◦i
(不区分大小写)、m
(多行匹配)、x
(忽略空白)
• 性能建议:避免前导通配符(如/^.../
更高效) -
$mod
取模运算
• 限制:仅对数值类型字段有效,字符串类型自动忽略
• 示例:// 查找年龄能被3整除的用户(数值型age) db.users.find({"age": {$mod: [3, 0]}})
三、自定义条件与复杂查询
$where
自定义函数
• 功能:通过 JavaScript 函数实现复杂逻辑
• 警告:因需调用 JS 引擎,性能较差,应优先使用原生操作符
• 示例:// 查找年龄>33且子年龄<4的家长(低效方式) db.users.find({$where: "this.age>33 && this.child.age<4"})
四、结果控制与格式化
-
排序
sort()
• 语法:1
升序,-1
降序,支持多字段排序
• 示例:db.users.find().sort({age: -1, sex: 1}) // 年龄降序,性别升序
-
字段投影(Projection)
• 规则:1
显示字段,0
隐藏字段,_id
默认显示需显式排除
• 示例:// 仅返回name和mobile字段,隐藏_id db.users.find({}, {name: 1, mobile: 1, _id: 0})
-
分页控制
limit()
&skip()
• 用途:实现分页查询(需配合排序保证结果稳定)
• 示例:// 获取第2页数据(每页5条) db.users.find().sort({age:1}).skip(5).limit(5)