복붙노트

[MONGODB] MongoDB를 C #을 드라이버 - 바인딩에 필드를 무시

MONGODB

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

MongoDB를 및 C #을 사용하여 FindOne ()를 사용하면 객체에없는 필드를 무시하는 방법은 무엇입니까?

EG, 예를 들어 모델.

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

이제 우리는 또한 MongoDB의 컬렉션에서 암호를 저장하지만, 객체 밖으로 이상에 바인딩하고 싶지 않아요. 우리가 같은 가져 오기 작업을 수행 할 때,

  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. ==============================

    1.예. 그냥 BsonIgnoreExtraElements 속성을 사용하여 UserModel 클래스를 장식 :

    예. 그냥 BsonIgnoreExtraElements 속성을 사용하여 UserModel 클래스를 장식 :

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

    이름에서 알 수 있듯이, 드라이버는 예외 상황을 던지는 대신 여분의 필드를 무시합니다. 자세한 내용은 여기 - 추가 요소를 무시.

  2. ==============================

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

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

    이 방법은, 우리는 [BsonIgnoreExtraElements] 모든 클래스에 주석을 달 필요가 없습니다.

    어딘가에는 설치 다음을 몽고 클라이언트를 만들 때 :

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

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

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

    당신이 당신의 드라이버를 초기화 할 때 귀하의 경우에는 그냥이 코드를 추가합니다 :

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

    추가 요소를 무시 - 현재 클래스 매핑을 사용하여 추가 요소를 무시에 대한 자세한 내용을보실 수 있습니다.

  4. from https://stackoverflow.com/questions/23448634/mongodb-c-sharp-driver-ignore-fields-on-binding by cc-by-sa and MIT license