Вы должны использовать метод Projection
на IFindFluent
(что Find
и Projection
Обратно):
var findFluent = Collection.Find(query).Projection(Fields<MealPlan>.Exclude (plan => plan.Meals))
Теперь это в конечном итоге сформировать курсор BsonDocument
с, так как он не знает, как проекция выглядит. Вы можете вызвать родовую Projection
вместо того, чтобы добавить этот тип:
var findFluent = Collection.Find(query).Projection<MealPlan>(Fields<MealPlan>.Exclude (plan => plan.Meals))
В более общем смысле (что менее актуально при использовании Exclude
), можно также указать поля с помощью лямбда-выражения:
var findFluent = Collection.Find(query).Projection(plan => plan.Meals)
Спасибо. Я знаю, что драйвер находится в бета-версии, но будет ли общий дизайн поддержки абстрактными классами? Я предполагаю, что сериализатор имеет доступ к дискриминатору для определения конкретного типа. – Graeme
Что именно вы имеете в виду? –
@Graeme Вы имеете в виду что-то вроде 'Collection.Find (query) .Projection (Fields.Include (" _ id "))'? Нет, он не будет работать, поскольку он пытается создать экземпляр из 'AbstractPlan'. Он может работать, если базовый класс не является абстрактным, но экземпляр будет иметь базовый класс, а не конкретный тип. –
i3arnon