Wir haben eine Sammlung enthält Dokumente auf dem Server. Jedes Dokument ist wie folgt:Include/Exclude-Felder in Abfrage mit MongoDB C# -Treiber 2.4
{ _id: "...", Prop1: "", Prop2: "", Prop3: "", LargeField: "", ... }
Es gibt viele andere Felder, aber sie werden nicht vom Client benötigt.
Ich möchte Dokumente als MyDoc
Klasse laden, deren Definition ist:
public class MyDoc {
public string Id { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
public string LargeField { get; set; }
}
Ich habe versucht:
var client = new MongoClient(uri);
var database = client.GetDatabase("MyDatabase");
var collection = database.GetCollection<MyDocs>("MyDocs");
var allDocs = collection.Find().ToList();
Dann wird es für jedes Dokument alle Felder laden, also muss ich Setzen Sie [BsonIgnoreExtraElements]
auf MyDoc
. Das Problem hier ist, dass das Dokument groß ist, aber ich brauche nur eine begrenzte Teilmenge von Feldern. Ist es möglich, den Fahrer wissen zu lassen, dass ich nur die in der Klasse definierten Felder brauche?
Wenn nicht, ist es möglich, einige der Felder wie LargeField
auszuschließen, um die Ergebnismenge kleiner zu machen? Ich habe versucht:
var fieldsBuilder = Builders<MyDoc>.Projection;
var fields = fieldsBuilder.Exclude(d => d.LargeField);
var allDocs = collection.Find().Project(fields).ToList();
Aber jetzt allDocs
wird BsonDocument
Liste anstatt die MyDoc
Liste. Wie kann man MyDoc
mit Projektion abfragen?
Kann jemand helfen? Im Legacy-MongoDB-Treiber ist es ziemlich einfach, aber ich weiß nicht, wie man es in dem neuen Treiber macht. Vielen Dank.