Program Tip

MongoDB C # 드라이버-바인딩시 필드 무시

programtip 2020. 12. 10. 21:01
반응형

MongoDB C # 드라이버-바인딩시 필드 무시


MongoDB 및 C #을 사용하여 FindOne ()을 사용할 때 개체에없는 필드를 무시하는 방법이 있습니까?

EG, 예시 모델.

public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

이제 MongoDB 컬렉션에도 비밀번호를 저장하지만 위의 객체에 바인딩하고 싶지는 않습니다. Get like 그렇게하면

  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 

어쨌든 Mongo에게 모델과 일치하지 않는 필드를 무시하도록 말할 수 있습니까?


예. 속성으로 UserModel클래스를 장식하십시오 BsonIgnoreExtraElements.

[BsonIgnoreExtraElements]
public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

이름에서 알 수 있듯이 드라이버는 예외를 발생시키는 대신 추가 필드를 무시합니다. 자세한 내용은 여기에서 추가 요소 무시 .


또 다른 가능한 해결책은 이에 대한 규칙을 등록하는 것입니다.

이렇게하면 모든 클래스에 [BsonIgnoreExtraElements] 주석을 달 필요가 없습니다 .

mongo 클라이언트를 만들 때 다음을 설정하십시오.

        var pack = new ConventionPack();
        pack.Add(new IgnoreExtraElementsConvention(true));
        ConventionRegistry.Register("My Solution Conventions", pack, t => true);

예. (대신 당신에게 모델 클래스를 편집의) 또 다른 방법은 사용하는 것입니다 RegisterClassMap함께 SetIgnoreExtraElements.

귀하의 경우에는 드라이버를 초기화 할 때 다음 코드를 추가하십시오.

BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
     cm.AutoMap();
     cm.SetIgnoreExtraElements(true);
});

여기에서 클래스 매핑을 사용하여 추가 요소를 무시하는 방법에 대해 자세히 알아볼 수 있습니다 . 추가 요소 무시 .

참고 URL : https://stackoverflow.com/questions/23448634/mongodb-c-sharp-driver-ignore-fields-on-binding

반응형