Mặc định collection.find() trả về tất cả các trường của document. Tuy nhiên, bạn có thể chỉ định trường nào được trả về (projection) bằng tham số thứ 2 của find().
Cú pháp Projection
db.collection.find({query}, {field1: 1, field2: 1, ...})
1= include (bao gồm trường này)0= exclude (loại trừ trường này)- Không thể mix 1 và 0 (trừ _id)
Ví dụ minh họa
Tạo collection và dữ liệu
> db.returnFieldInFindDemo.insertOne({"StudentName":"John","StudentAge":23,"TechnicalSubject":["MongoDB","MySQL"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8ebfe72f684a30fbdfd566") }
> db.returnFieldInFindDemo.insertOne({"StudentName":"Mike","StudentAge":24,"TechnicalSubject":["Java","Python"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8ebffd2f684a30fbdfd567") }
> db.returnFieldInFindDemo.insertOne({"StudentName":"Sam","StudentAge":22,"TechnicalSubject":["C","C++"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8ec00f2f684a30fbdfd568") }
> db.returnFieldInFindDemo.insertOne({"StudentName":"Carol","StudentAge":20,"TechnicalSubject":["DataStructure","Algorithm"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8ec0292f684a30fbdfd569") }
Xem tất cả documents (mặc định)
> db.returnFieldInFindDemo.find().pretty();
{
"_id" : ObjectId("5c8ebfe72f684a30fbdfd566"),
"StudentName" : "John",
"StudentAge" : 23,
"TechnicalSubject" : [ "MongoDB", "MySQL" ]
}
{
"_id" : ObjectId("5c8ebffd2f684a30fbdfd567"),
"StudentName" : "Mike",
"StudentAge" : 24,
"TechnicalSubject" : [ "Java", "Python" ]
}
{
"_id" : ObjectId("5c8ec00f2f684a30fbdfd568"),
"StudentName" : "Sam",
"StudentAge" : 22,
"TechnicalSubject" : [ "C", "C++" ]
}
{
"_id" : ObjectId("5c8ec0292f684a30fbdfd569"),
"StudentName" : "Carol",
"StudentAge" : 20,
"TechnicalSubject" : [ "DataStructure", "Algorithm" ]
}
Trường hợp 1: Chỉ trả về trường cụ thể (include)
> db.returnFieldInFindDemo.find({}, {"TechnicalSubject": 1}).pretty();
{
"_id" : ObjectId("5c8ebfe72f684a30fbdfd566"),
"TechnicalSubject" : [ "MongoDB", "MySQL" ]
}
{
"_id" : ObjectId("5c8ebffd2f684a30fbdfd567"),
"TechnicalSubject" : [ "Java", "Python" ]
}
{
"_id" : ObjectId("5c8ec00f2f684a30fbdfd568"),
"TechnicalSubject" : [ "C", "C++" ]
}
{
"_id" : ObjectId("5c8ec0292f684a30fbdfd569"),
"TechnicalSubject" : [ "DataStructure", "Algorithm" ]
}
Chỉ trả về _id (mặc định luôn có) và TechnicalSubject.
Trường hợp 2: Loại trừ trường cụ thể (exclude)
> db.returnFieldInFindDemo.find({}, {"TechnicalSubject": 0}).pretty();
{
"_id" : ObjectId("5c8ebfe72f684a30fbdfd566"),
"StudentName" : "John",
"StudentAge" : 23
}
{
"_id" : ObjectId("5c8ebffd2f684a30fbdfd567"),
"StudentName" : "Mike",
"StudentAge" : 24
}
{
"_id" : ObjectId("5c8ec00f2f684a30fbdfd568"),
"StudentName" : "Sam",
"StudentAge" : 22
}
{
"_id" : ObjectId("5c8ec0292f684a30fbdfd569"),
"StudentName" : "Carol",
"StudentAge" : 20
}
Trả về tất cả trường trừ TechnicalSubject.
Trường hợp 3: Không dùng projection (mặc định)
> db.returnFieldInFindDemo.find();
Trả về tất cả trường.
Lưu ý về _id
_idluôn được trả về trừ khi bạn explicitly exclude:{_id: 0}- Khi dùng include (1), chỉ _id và các trường include được trả về
- Khi dùng exclude (0), tất cả trường trừ các trường exclude được trả về
Ví dụ kết hợp
// Chỉ lấy tên và tuổi, không lấy _id
db.returnFieldInFindDemo.find({}, {_id: 0, StudentName: 1, StudentAge: 1});