MongoDB doesn't properly support decimals until MongoDB v3.4. Before this version it stored decimals as strings to avoid precision errors.
Pre v3.4
Store decimals as strings, but this prevents arithmetic operations. Operators as $min
, $avg
, ... won't be available. If precision is not a big deal, then you might be able to switch to double
.
v3.4+
You need to make sure the following preconditions are true:
- MongoDB server should be at least v3.4.
- MongoCSharpDriver should be at least v2.4.3.
- Database should have
featureCompatibilityVersion
set to '3.4'
. If your database has been created by an older MongoDB version and you have upgraded your server to v3.4 your database might still be on an older version.
If you have all the properties set, then register the following serializers to use the decimal128
type:
BsonSerializer.RegisterSerializer(typeof(decimal), new DecimalSerializer(BsonType.Decimal128));
BsonSerializer.RegisterSerializer(typeof(decimal?), new NullableSerializer<decimal>(new DecimalSerializer(BsonType.Decimal128)));
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…