findOne()(查询单条文档)
最后更新:2026-10-09
findOne()(查询单条文档)
findOne()查询第一条匹配条件的文档并直接返回文档对象,而不是游标,例如`db.users.findOne({ name: 'Alice' })`。多条匹配时返回自然顺序的第一条,无匹配返回null。它比find()少一步遍历,适合按唯一字段(如_id、用户名)取单条记录的场景。
| 分类 | 读取 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.findOne(<过滤条件>, <投影>)
⚙️ 参数
| 过滤条件 | 匹配文档的条件对象,支持查询操作符。 |
|---|---|
| 投影 | 可选。控制返回字段:1包含/0排除。 |
返回值:匹配的第一条文档对象;无匹配返回null。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// findOne:按_id查询单条用户
const user = db.users.findOne(
{ _id: ObjectId('64c8a1b20000000000000001') },
{ name: 1, age: 1, _id: 0 }
)
user
运行结果:
{ name: 'Alice', age: 21 }
📌 注意事项
- 多条匹配时只返回第一条,顺序不保证稳定
- 无匹配返回null,用if (doc) 判断再使用
- 比find().limit(1)少一次游标操作,语义更清晰
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QfindOne和find().limit(1)一样吗?
A效果类似但findOne()直接返回文档对象,find()返回游标还需迭代;按唯一字段取值时推荐findOne()。
QfindOne查不到数据返回什么?
A返回null,不会抛错。一般写成if (doc) { ... }来消费结果。
QfindOne能只返回部分字段吗?
A可以,用第二个参数做投影,例如{projection: {name: 1}}或直接传{name: 1}。