Подтвердить что ты не робот

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 

Есть ли вообще сказать Монго игнорировать поля, которые он не может совместить с моделями?

4b9b3361

Ответ 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);