如何使用標準C#驅動程序在MongoDB中存儲小數?似乎所有小數都以字符串形式存儲在數據庫中。如何在MongoDB中使用十進制類型
3
A
回答
8
直到MongoDB v3.4,MongoDB才正確支持小數。在這個版本之前,它將小數存儲爲字符串以避免精度錯誤。
預先v3.4 將小數存儲爲字符串,但這可以防止算術運算。運營商爲$min
,$avg
,...將不可用。如果精度不是很大,那麼你可以切換到double
。
V3.4 + 您需要確保下列前提條件爲真:
- MongoDB的服務器至少應爲V3.4。
- MongoCSharpDriver應該至少v2.4.3。
- 數據庫應該有
featureCompatibilityVersion
設置爲'3.4'
。如果您的數據庫是由較早的MongoDB版本創建的,並且您的服務器已升級到v3.4,那麼您的數據庫可能仍然是舊版本。
如果你把所有的屬性進行設置,然後註冊下列串行使用decimal128
類型:
BsonSerializer.RegisterSerializer(typeof(decimal), new DecimalSerializer(BsonType.Decimal128));
BsonSerializer.RegisterSerializer(typeof(decimal?), new NullableSerializer<decimal>(new DecimalSerializer(BsonType.Decimal128)));
0
我不得不使用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());
相關問題
- 1. 十進制類型
- 2. 十進制類型
- 3. Visual Basic十進制類型
- 4. Zend_Db類型十進制
- 5. 如何使用十進制?
- 6. 在InfoPath 2010中使用十進制/金錢字段類型
- 7. 使用qreal在Qt中顯示十進制值數據類型
- 8. PHP中的MySQL十進制值類型
- 9. php中的十進制類型
- 10. 在Java十六進制數據類型
- 11. 將.net十進制類型轉換爲tsql十進制(3,3)
- 12. C# - 十進制類型的十進制精度更高
- 13. 使用十進制或十六進制
- 14. 如何在AES加密中使用十六進制十六進制密鑰?
- 15. 如果使用十進制數據類型的語句
- 16. 如何在bash中將十進制轉換爲十六進制?
- 17. 如何在Python中將十六進制轉換爲十進制?
- 18. RelaxNG使用十進制數據類型和設置值限制?
- 19. 如何轉換爲Protobuf.js中的十進制類型
- 20. UI li風格類型:十進制在IE7中不起作用?
- 21. 如何在Python中使用十進制值進行模運算?
- 22. 強制類型錯誤從長到十進制類型對象
- 23. Python十進制類型精度錯誤
- 24. 算術十進制選項類型
- 25. vb.net大於十進制數據類型
- 26. C#類型後綴爲十進制
- 27. SQL Server十六進制數據類型
- 28. ç十六進制常量類型
- 29. asp.net mvc 3 SelectList十進制類型
- 30. SparkSQL功能需要類型十進制
大註冊,你救我的天! – vNext