Cập nhật: Với phiên bản driver mới (1.6 trở lên) bạn có thể tránh tên lĩnh vực cứng mã hóa và sử dụng LINQ thay vì:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields<T>.Include(e => e.Id, e => e.Name));
Bạn có thể làm điều đó thông qua SetFields
phương pháp của con trỏ MongoDB:
var users = usersCollection.FindAllAs<T>()
.SetFields("_id") // include only _id
.ToList();
Bằng cách defaul SetFileds
bao gồm các trường được chỉ định. Nếu bạn cần loại trừ các lĩnh vực nhất định, bạn có thể sử dụng:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields.Exclude("_id")) // exclude _id field
.ToList();
Hoặc bạn có thể sử dụng chúng với nhau:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields.Exclude("_id") // exclude _id field
.Include("name")) // include name field
.ToList();
Nguồn
2011-12-09 16:33:32
Nhưng phương pháp Dự án chỉ lọc kết quả vào bộ nhớ. Toàn bộ tài liệu đang được lấy từ máy chủ, Điều này là xấu nếu tài liệu lớn. Phải có một số cuộc gọi API khác trong trình điều khiển C# làm cho truy vấn chỉ tìm nạp các trường cụ thể. –
@YaronLevi No, 'Project' ** không ** chỉ lọc trong bộ nhớ. ** Đó là ** API chỉ tìm nạp các trường cụ thể. – i3arnon
Phương pháp này yêu cầu lớp học phải được đăng ký (tức là 'BsonClassMap.RegisterClassMap ...')? –
MoonKnight