Aktualizacja: z nową wersją sterowników (1.6 +) można uniknąć nazwy pól sztywnego kodowania i używać LINQ zamiast:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields<T>.Include(e => e.Id, e => e.Name));
Można to zrobić poprzez SetFields
metody MongoDB kursora:
var users = usersCollection.FindAllAs<T>()
.SetFields("_id") // include only _id
.ToList();
Według defaul SetFileds
zawierają określone pola. Jeśli trzeba wykluczyć niektóre pola można użyć:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields.Exclude("_id")) // exclude _id field
.ToList();
Albo można ich używać razem:
var users = usersCollection.FindAllAs<T>()
.SetFields(Fields.Exclude("_id") // exclude _id field
.Include("name")) // include name field
.ToList();
Ale metoda projektu filtruje tylko wynik w pamięci. Cały dokument jest pobierany z serwera, jest to złe, jeśli dokument jest duży. W sterowniku C# musi być inne wywołanie API, które powoduje, że zapytanie pobiera tylko określone pola. –
@YaronLevi Nie, 'Projekt' ** nie ** filtruje tylko w pamięci. ** To jest interfejs API, który pobiera tylko określone pola. – i3arnon
Czy metoda ta wymaga zarejestrowania klasy (np. 'BsonClassMap.RegisterClassMap ...')? –
MoonKnight