Phương thức find() là lệnh truy vấn cơ bản và phổ biến nhất trong MongoDB. Nó chọn tài liệu từ collection/view và trả về một **con trỏ (cursor)** để lặp qua các kết quả. Hiểu rõ find() là nền tảng của mọi thao tác đọc dữ liệu.
1. Cú pháp cơ bản
db.collection.find(query, projection)
query(object): Điều kiện lọc (filter). Rỗng{}hoặc không truyền = lấy tất cả.projection(object): Chọn trường hiển thị/ẩn.{ field: 1 }hiển thị,{ field: 0 }ẩn._idmặc định = 1.
2. Ví dụ: Tạo collection và chèn dữ liệu lồng nhau
> db.demo405.insertOne({ "StudentInfo": { "Name": "Chris" } });
> db.demo405.insertOne({ "StudentInfo": { "Name": "David" } });
> db.demo405.insertOne({ "StudentInfo": { "Name": "Bob" } });
> db.demo405.insertOne({ "StudentInfo": { "Name": "John" } });
3. find() không tham số: Lấy tất cả tài liệu, tất cả trường
> db.demo405.find();
Kết quả:
{ "_id": ObjectId("..."), "StudentInfo": { "Name": "Chris" } }
{ "_id": ObjectId("..."), "StudentInfo": { "Name": "David" } }
{ "_id": ObjectId("..."), "StudentInfo": { "Name": "Bob" } }
{ "_id": ObjectId("..."), "StudentInfo": { "Name": "John" } }
4. Các biến thể hay dùng
find({ "StudentInfo.Name": "Chris" }): Lọc tên = Chris (dot notation truy cập field lồng).find({}, { "StudentInfo.Name": 1, _id: 0 }): Chỉ lấy tên, ẩn _id.find().limit(10): Giới hạn 10 kết quả.find().sort({ "StudentInfo.Name": 1 }): Sắp xếp A-Z.find().skip(5).limit(10): Phân trang (bỏ 5, lấy 10).
Lưu ý: find() trả về **cursor**, chưa lấy dữ liệu thật sự cho đến khi duyệt (toArray, forEach, next, hoặc shell tự in 20 bản ghi đầu).