findOne 方法详细文档
📑 目录
概述
findOne 是 monSQLize 提供的基础查询方法,用于从 MongoDB 集合中查询第一条匹配的文档记录。支持查询条件、排序、投影和缓存等功能。
方法签名
参数说明
query 参数
类型: Object
默认值: {}
必填: 否
MongoDB 查询条件对象,支持所有 MongoDB 查询操作符。
示例:
options 对象属性
图例说明:
- ✅ MongoDB 原生: 该参数是 MongoDB 官方支持的标准功能
- 🔧 monSQLize 扩展: monSQLize 独有的扩展功能
MongoDB 参考文档:
comment 配置
查询注释用于在 MongoDB 日志中标识查询来源,便于生产环境的运维监控和性能分析:
使用场景:
- 业务场景标识:标识查询来自哪个页面或功能
- 用户追踪:记录查询关联的用户或会话
- 分布式追踪:结合 traceId 关联完整请求链路
- 性能分析:在慢查询日志中快速定位问题
示例:
参考:完整的 comment 使用指南请参考 find 方法文档
projection 配置
投影配置用于指定查询结果中包含或排除的字段,支持两种格式:
对象格式:
数组格式:
注意:
- MongoDB 不允许混合使用包含(1)和排除(0),除了
_id字段 - 数组格式会自动转换为包含模式
_id字段默认总是包含,除非显式排除:{ _id: 0 }
sort 配置
排序配置指定结果的排序方式:
性能建议:
- 对于大数据集,确保排序字段上有索引
- 避免对未索引的字段进行排序
- 使用复合索引可以优化多字段排序
hint 配置
强制 MongoDB 使用指定的索引:
使用场景:
- MongoDB 查询优化器选择了错误的索引
- 需要强制使用特定索引以保证性能
- 测试不同索引的性能差异
collation 配置
指定字符串比较和排序的规则:
常见场景:
- 需要不区分大小写的查询和排序
- 多语言环境下的正确排序
- 数字字符串的自然排序
返回值
普通模式返回对象或 null
默认情况下,findOne 方法返回一个 Promise,resolve 为匹配的第一条文档或 null:
返回值类型:Promise<Object|null>
explain 模式返回执行计划
当 explain 为 true 或指定级别时,返回查询执行计划:
返回值类型:Promise<Object>
使用模式
1. 基础查询
最简单的查询方式,返回第一条匹配的文档:
适用场景:
- 根据唯一标识查询单条记录
- 获取最新/最旧的记录
- 检查记录是否存在
2. 复杂查询条件
使用 MongoDB 查询操作符构建复杂查询:
3. 使用索引优化
通过 hint 强制使用索引,explain 查看执行计划:
性能优化建议:
- 为常用查询字段创建索引
- 使用复合索引优化多条件查询
- 定期分析慢查询并优化索引
4. 缓存使用
启用缓存以提升查询性能:
缓存策略:
- 对频繁查询且数据变化不频繁的记录启用缓存
- 设置合理的 TTL 时间
- 注意缓存失效机制
错误处理
findOne 方法可能抛出以下错误:
常见错误:
NOT_CONNECTED: 数据库未连接- 查询超时错误
- 权限相关错误
最佳实践
- 总是指定排序:当有多条记录匹配时,确保返回结果的一致性
- 使用投影:只返回需要的字段,减少网络传输和内存使用
- 合理使用缓存:对读多写少的场景启用缓存
- 创建适当索引:确保查询性能
- 处理 null 返回值:检查查询结果是否为 null
相关方法
find(): 查询多条记录count(): 统计记录数量findPage(): 分页查询invalidate(): 使缓存失效