$exists(存在性)
最后更新:2026-10-09
$exists(存在性)
$exists 按字段是否存在筛选文档。`{ $exists: true }` 匹配字段存在(值非 null)的文档;`{ $exists: false }` 匹配字段不存在的文档。它是处理「字段缺失」问题的核心工具,常与 $ne、$gt 组合,弥补这些操作符不匹配缺失字段的局限。
| 分类 | 元素与求值 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <字段>: { $exists: <boolean> } }
⚙️ 参数
| 字段 | 要检查是否存在的文档字段名。 |
|---|---|
| boolean | true 匹配字段存在,false 匹配字段不存在。 |
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $exists:查有邮箱的用户
// 字段存在且值非 null 才匹配
db.users.find({ email: { $exists: true } })
// 没有邮箱字段的用户
db.users.find({ email: { $exists: false } })
运行结果:
// 前者返回有 email 字段的用户;后者返回完全没有该字段的用户
📌 注意事项
- $exists: true 不匹配字段存在但值为 null 的文档
- 与 $ne/$gt/$nin 组合可弥补它们不匹配缺失字段的问题
- 对嵌套字段用点路径:{ 'address.city': { $exists: true } }
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$exists: true 会匹配 null 值吗?
A不会。字段存在但值为 null 时不匹配 $exists: true;可用 $type: 10 或 $eq: null 处理。
Q$exists 和 $ne 怎么配合?
A{ $ne: 值, $exists: true } 表示「字段存在且不等于某值」,避免 $ne 跳过缺失字段。
Q怎么查数组字段是否存在?
A同样用 { $exists: true },数组字段存在即匹配,空数组也视为存在。