Vấn đề
Chỉ cần lấy giá trị của một trường (field) cụ thể từ document thỏa mãn điều kiện, không cần toàn bộ document.
Giải pháp: findOne() với projection
Cú pháp:
db.collection.findOne({"fieldDieuKien": giaTri}, {fieldCanLay: 1})
- Tham số 1: filter (điều kiện tìm kiếm).
- Tham số 2: projection - chỉ định trường cần lấy (1 = lấy, 0 = không lấy).
_idmặc định trả về trừ khi đặt_id: 0.
Ví dụ minh họa
1. Tạo collection nhân viên
> db.particularFieldDemo.insertOne({"EmployeeName":"John Smith","EmployeeAge":26,"EmployeeTechnology":"MongoDB"});
> db.particularFieldDemo.insertOne({"EmployeeName":"Chris Brown","EmployeeAge":28,"EmployeeTechnology":"Java"});
> db.particularFieldDemo.insertOne({"EmployeeName":"David Miller","EmployeeAge":30,"EmployeeTechnology":"MySQL"});
> db.particularFieldDemo.insertOne({"EmployeeName":"John Doe","EmployeeAge":31,"EmployeeTechnology":"C++"});
2. Lấy EmployeeName của người dùng Technology = "Java"
> db.particularFieldDemo.findOne({"EmployeeTechnology":"Java"}, {EmployeeName: 1});
3. Kết quả
{ "_id" : ObjectId("5cd9b4d2b50a6c6dd317ada3"), "EmployeeName" : "Chris Brown" }
Lưu ý
findOne()trả về 1 document đầu tiên khớp (theo natural order).- Cần nhiều document → dùng
find()với projection:db.coll.find({filter}, {field:1}). - Projection cũng áp dụng trong aggregation:
{$project: {field: 1}}.