Sự khác biệt chính giữa find() và findOne() trong MongoDB:
- findOne(): Trả về document đầu tiên khớp điều kiện, hoặc null nếu không tìm thấy
- find(): Trả về một con trỏ (cursor) đến tập kết quả, không bao giờ trả về null (dày cursor rõng trả về cursor rỗng)
Minh họa với collection rỗng
Tạo collection rỗng:
> db.createCollection('emptyCollection');
{ "ok" : 1 }
Kiểm tra số document:
> db.emptyCollection.count(); 0
Kiểm tra findOne() trên collection rỗng
> if(db.emptyCollection.findOne()){print("Returns Cursor")} else {print("Not returning cursor")}
Not returning cursor
findOne() trả về null nên điều kiện if đánh giá là false.
Kiểm tra find() trên collection rỗng
> if(db.emptyCollection.find()){print("Returns Cursor")} else {print("Not returning cursor")}
Returns Cursor
find() trả về cursor (dù rỗng) nên điều kiện if đánh giá là true.
Tóm tắt
| Phương thức | Trả về | Khi không khớp | Sử dụng khi |
|---|---|---|---|
| findOne() | Document hoặc null | null | Chỉ cần 1 document, kiểm tra tồn tại |
| find() | Cursor | Cursor rỗng | Cần nhiều document, lặp qua kết quả |
Hiểu rõ sự khác biệt này giúp tránh lỗi logic khi kiểm tra kết quả truy vấn trong ứng dụng.