如何在MongoDB v3.6中处理小数

时间:2018-12-22 09:20:22

标签: database mongodb mongoose decimal schema

我正在使用MongoDB v3.6.3.。

我看到similar question收到了很好的答案。那我为什么要问这个问题?

  1. 因为我正在使用其他版本的MongoDB
  2. 因为我刚刚在数据库中存储了一个十进制数字,却没有按照similar question的答案中的说明注册任何序列化程序,所以不会引发任何错误。

我的MongoDB模式如下:

RewriteRule .* /error [L,R]

所以我的问题是,我实现此方法的方式是否有问题。考虑到我已经在数据库中存储了一个十进制数字。可以在当前架构中存储十进制数字吗?还是因为我错过了一步而将来会出现错误?

谢谢。

1 个答案:

答案 0 :(得分:1)

Number类型是cannot accurately represent decimal values的浮点数字表示形式。如果您的用例不需要浮点数的精度,这可能很好,但是如果精度很重要(例如,分数货币值),则不合适。

如果您想精确地存储和使用十进制值,则应改用Mongoose中的Decimal128 type。这映射到MongoDB 3.4+中可用的Decimal 128(aka NumberDecimal)BSON数据类型,也可以使用Aggregation Framework在服务器端计算中对其进行操作。

如果您的rating字段不需要精确度,则可以继续使用Number类型。这样做的原因之一是Number类型是JavaScript固有的,而Decimal128不是。

有关更多详细信息,请参见A Node.js Perspective on MongoDB 3.4: Decimal Type