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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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