紀錄如何使用MongoDB .NET Driver處理 Decimal 值
MongoDB .NET Driver Handle Decimal
在資料型別轉換的部分可使用BsonRepresentation這個修飾attribute幫我們做轉換,但由於Mongo 3.4之前尚未支援BsonDecimal128,所以僅能使用BsonType.Double
測試程式碼:
Member.cs:
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace MongoCRUD.Core.Pocos
{
public class Member
{
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
// MogoDB 3.4, Support BsonDecimal128, Decimal (28-29)
[BsonElement("balance"),BsonRepresentation(BsonType.Decimal128)]
// Below than 3.4, only convert to Double (15-16)
//[BsonElement("balance"), BsonRepresentation(BsonType.Double)]
public decimal Balance { get; set; }
}
}
測試程式結果(依序為:BsonRepresentation為BsonType.Double,不設定BsonRepresentation,BsonRepresentation為BsonType.Decimal128):
這邊我們其實是將Decimal的值傳入0.123456789876543212345678987654321M,但從結果來看他會將超出的部分進位後截斷
蛋如果是我們指定BsonRepresentation為BsonType.Double且資料長度超出轉換長度則會拋出例外(exception).
另外,先前介紹跨平台的MongoDB UI Admin 工具 - Robomongo則在顯示decimal資料上有問題,會出現unsupported的狀況.