복붙노트

[MONGODB] MongoDB의 진수 형식을 사용하는 방법

MONGODB

MongoDB의 진수 형식을 사용하는 방법

어떻게 표준 C # 드라이버를 사용하여 MongoDB에서 소수를 저장할 수 있습니까? 모든 소수 문자열로 데이터베이스 내부에 저장되어있는 것으로 보인다.

해결법

  1. ==============================

    1.MongoDB를 제대로 MongoDB를의 V3.4까지 소수점을 지원하지 않습니다. 이 버전 전에 정밀 오류를 방지하기 위해 문자열로 소수를 저장.

    MongoDB를 제대로 MongoDB를의 V3.4까지 소수점을 지원하지 않습니다. 이 버전 전에 정밀 오류를 방지하기 위해 문자열로 소수를 저장.

    사전에 V3.4 상점 문자열로 소수하지만,이 방지 산술 연산. $ 분, $ 평균과 같은 연산자는 ... 사용할 수 없습니다. 정밀도가 큰 문제가 아닌 경우에, 당신은 두배로 전환 할 수 있습니다.

    V3.4 + 당신은 확실히 다음과 같은 전제 조건에 해당 할 필요가 :

    당신은 모든 속성을 설정 한 경우, DECIMAL128 유형을 사용하려면 다음 시리얼을 등록 :

    BsonSerializer.RegisterSerializer(typeof(decimal), new DecimalSerializer(BsonType.Decimal128));
    BsonSerializer.RegisterSerializer(typeof(decimal?), new NullableSerializer<decimal>(new DecimalSerializer(BsonType.Decimal128)));
    
  2. ==============================

    2.나는 최근에이 문제에 달렸다. 간단히 말해서 나는이처럼 내 객체를 주석하여 해결 :

    나는 최근에이 문제에 달렸다. 간단히 말해서 나는이처럼 내 객체를 주석하여 해결 :

    [BsonRepresentation(BsonType.Decimal128)]
    public decimal Price {get; set;}
    
  3. ==============================

    3.그것은 이미 시리얼 등록했지만, 대안은 자신의 직렬화 제공자를 작성하고 그것을 사용하는 것입니다 불평으로 나는 RegisterSerializer 접근 방식을 사용하여 문제를 가지고 있었다.

    그것은 이미 시리얼 등록했지만, 대안은 자신의 직렬화 제공자를 작성하고 그것을 사용하는 것입니다 불평으로 나는 RegisterSerializer 접근 방식을 사용하여 문제를 가지고 있었다.

    여기 제공자는 다음과 같습니다

    public class CustomSerializationProvider : IBsonSerializationProvider
    {
        private static readonly DecimalSerializer DecimalSerializer = new DecimalSerializer(BsonType.Decimal128);
        private static readonly NullableSerializer<decimal> NullableSerializer = new NullableSerializer<decimal>(new DecimalSerializer(BsonType.Decimal128));
    
        public IBsonSerializer GetSerializer(Type type)
        {
            if (type == typeof(decimal)) return DecimalSerializer;
            if (type == typeof(decimal?)) return NullableSerializer;
    
            return null; // falls back to Mongo defaults
        }
    }
    

    당신은 전화로 등록해야하는

    BsonSerializer.RegisterSerializationProvider(new CustomSerializationProvider());
    
  4. from https://stackoverflow.com/questions/43473147/how-to-use-decimal-type-in-mongodb by cc-by-sa and MIT license