Ограничить поля вложенных документов

Я использую официальный драйвер MongoDB C# для связи с моими серверами MongoDB. Это моя полная схема сущности:

public class Person
{
    public ObjectId _id { get; set; }
    public String FirstName { get; set; }
    public String LastName { get; set; }

    public DateTime DateOfBirth { get; set; }
    public List<Address> Addresses  { get; set; }
}

public class Address
{
    public String Street { get; set; }
    public String City { get; set; }
}

Теперь, в некоторых случаях я просто хочу получить следующее возвращение:

public class Person_LocationOview
{
    public String LastName { get; set; }
    public List<Address_CityOnly> Addresses  { get; set; }
}

public class Address_CityOnly
{
    public String City { get; set; }
}

Поведение по умолчанию для загрузки всех полей и выполнения сопоставления самостоятельно

MongoCursor<Person>

бессмысленно, потому что я просто хочу загрузить конкретные поля. С помощью отражения я генерирую поля для загрузки и отправки:

var fields = new { "LastName", "Addresses.City" };
MongoCollection< BsonDocument >.FindAllAs< Person_LocationOview >( )
     .SetFields( fields ).ToList( );

Я думал, что сериализатор MongoDB будет интеллектуальным; но вызов возвращает следующую ошибку:

System.IO.FileFormatException: обязательный элемент 'City' для свойства 'City' класса Models.Address_CityOnly отсутствует

Есть идеи по этому требованию?

1 ответ

Решение

Я обновил полную инфраструктуру MongoDB. Теперь код работает со всеми моделями представления, такими как Person_LocationOview. С полной схемой классов код все еще падает, и я не знаю почему.

Теперь все мои классы представлений реализуют собственный интерфейс (IPartialEntityView). В моем методе отражения, чтобы получить имена полей, я проверю это наследование, и только тогда я буду загружать "Addresses.FieldName(s)". Если тип свойства не является типом.NET по умолчанию или не наследует IPartialEntityView, я буду использовать полное поле "Адреса".

Это прекрасно работает. Спасибо за все.

Другие вопросы по тегам