ASP.NET Core play with MongoDB and MongoDB .NET Driver - Decimal Convert


紀錄如何使用MongoDB .NET Driver處理 Decimal 值

MongoDB .NET Driver Handle Decimal

在資料型別轉換的部分可使用BsonRepresentation這個修飾attribute幫我們做轉換,但由於Mongo 3.4之前尚未支援BsonDecimal128,所以僅能使用BsonType.Double

測試程式碼:

mongo_net_driver_decimal

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):

mongo_decimal

這邊我們其實是將Decimal的值傳入0.123456789876543212345678987654321M,但從結果來看他會將超出的部分進位後截斷

蛋如果是我們指定BsonRepresentation為BsonType.Double且資料長度超出轉換長度則會拋出例外(exception).

另外,先前介紹跨平台的MongoDB UI Admin 工具 - Robomongo則在顯示decimal資料上有問題,會出現unsupported的狀況.

robomongo_unsupported

References


作者: Blackie
版權聲明: 本站所有文章除特別聲明外,均採用 CC BY 4.0 許可協議。轉載請註明來源 Blackie !
  目錄