MongoDB С# Driver - игнорировать поля при привязке
При использовании FindOne() с использованием MongoDB и С# существует ли способ игнорировать поля, не найденные в объекте?
EG, примерная модель.
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
Теперь мы также храним пароль в коллекции MongoDB, но не хотим связывать его с вышеописанным объектом. Когда мы делаем Get так,
var query = Query<UserModel>.EQ(e => e.Email, model.Email);
var entity = usersCollection.FindOne(query);
Мы получаем следующую ошибку
Element 'Password' does not match any field or property of class
Есть ли вообще сказать Монго игнорировать поля, которые он не может совместить с моделями?
Ответы
Ответ 1
Да. Просто украсьте свой класс UserModel
атрибутом BsonIgnoreExtraElements
:
[BsonIgnoreExtraElements]
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
Как следует из названия, драйвер игнорирует любые дополнительные поля, а не бросает исключение.
Ответ 2
Да. Другой способ (вместо редактирования класса модели) - использовать " Каталог классов классов" с " SetIgnoreExtraElements"
В вашем случае просто добавьте этот код при инициализации драйвера:
BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
Вы можете узнать больше о Mapo Class Mapping в:
http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/
Ответ 3
Еще одно возможное решение - зарегистрировать соглашение для этого.
Таким образом, нам не нужно комментировать все классы с помощью [BsonIgnoreExtraElements].
Где-то при создании клиента mongo настройте следующее:
var pack = new ConventionPack();
pack.Add(new IgnoreExtraElementsConvention(true));
ConventionRegistry.Register("My Solution Conventions", pack, t => true);