我对MongoDB没什么经验。我经常在大型SQL服务器DB上工作。
MongoDB只支持double和没有小数。 C#驱动程序将小数序列化为字符串。
如果我将小数字存储为字符串,我会错过什么功能 MongoDB的?
有没有办法将小数的默认序列化设置为double (AllowTruncation),而不必在每个上放置一个属性 属性
如果我使用Bson double,我会失去什么精确度?
感谢您的帮助!
我有一个在C#中使用小数的现有应用程序模型。我想将MongoDB用作新的数据库层,并尽可能在现有应用程序中进行更改。这就是为什么我在寻找一种方法将C#中的小数映射到MongoDB中的 double 。
我明白我的精确度会下降,并且必须分析它的副作用。我唯一剩下的问题是要知道是否有办法将小数的默认序列化设置为double。
再次感谢。到目前为止,很棒的答案和评论。
答案 0 :(得分:7)
我会部分回答你的问题(因为我对C#了解不多)。
那么如果你将小数作为字符串存储,你会失去什么。
如果将十进制存储为双精度,您将失去什么精确度:
db.c.insert({_id : 1, b : 3.44})
db.c.update({_id : 1},{$inc : {b : 1}})
db.c.find({b: 4.44}) // WTf, where is my document? There is nothing there
关于第二个子问题:
有没有办法将小数的默认序列化设置为double (AllowTruncation),而不必在每个属性上放置一个属性?
我真的不明白它,所以我希望有人能够回答它。
答案 1 :(得分:6)
从Mongodb 3.4和2.4 Mongodb C#驱动程序开始,支持十进制类型。
文档的属性必须具有[BsonRepresentation(BsonType.Decimal128)]
命名空间中的MongoDB.Bson.Serialization.Attributes
属性。
这将映射到MongodDB中的"YourDecimalValue" : NumberDecimal("100.0000")
。 Robomongo支持1.1 Beta版的新十进制类型。