Phương thức findOne() trả về một document duy nhất khớp với điều kiện, hoặc null nếu không tìm thấy. Tối ưu cho trường hợp cần 1 kết quả.
Dữ liệu mẫu (có trùng tên)
> db.demo230.insertOne({"FirstName":"Chris"});
> db.demo230.insertOne({"FirstName":"Bob"});
> db.demo230.insertOne({"FirstName":"Chris"});
> db.demo230.insertOne({"FirstName":"David"});
> db.demo230.insertOne({"FirstName":"David"});
Truy vấn findOne
> db.demo230.findOne({"FirstName":"David"});
Kết quả (chỉ 1 document dù có 2 "David")
{ "_id" : ObjectId("5e3fc4dff4cebbeaebec5141"), "FirstName" : "David" }
Đặc điểm so sánh:
| Đặc điểm | find() | findOne() |
|---|---|---|
| Trả về | Cursor | Document hoặc null |
| Số lượng | Tất cả khớp | Đầu tiên khớp |
| Duyệt | .forEach(), .toArray() | Trực tiếp dùng object |
| Hiệu suất | Chậm hơn nếu limit 1 | Tối ưu cho 1 kết quả |
| Projection | Tham số 2 | Tham số 2 |
| Sort | .sort() | Không hỗ trợ trực tiếp |
Mẹo: Cần sort trước khi findOne? Dùng find().sort({...}).limit(1).
Upsert pattern: findOneAndUpdate({}, {$setOnInsert: {...}}, {upsert: true, returnDocument: 'after'}).