Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB find(): Có trả về tất cả trường hay không?

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

  • _id luô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});