Varför har du samma "public ObjectId Id"; i varje härledd klass? Det är inte riktigt bra. Det döljer föräldra-ID-fältet.
För att lösa ditt problem måste du "registrera" dina härledda klasser (som i alla serialiserings-/deserialiseringsmekanismer). Det finns tre sätt att göra det:
-
Deklarativt sätt - dekorera basnodklass med:
[BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
-
Allmänt sätt - när typer är kända vid kompilering:
BsonClassMap.RegisterClassMap<PlotNode>(); BsonClassMap.RegisterClassMap<EndNode>();
-
Dynamiskt sätt - när typer är okända vid kompilering:
BsonClassMap.LookupClassMap(typeof(PlotNode)); BsonClassMap.LookupClassMap(typeof(EndNode));
-
Ett annat förslag - använd LINQ istället för Query
Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);