2011-10-07 105 views
24

我正在將一個mysql數據庫遷移到mongodb。但我已經閱讀過MongoDb數據類型,然後沒有提及像float,double,decimal這樣的浮點類型。MongoDB支持浮點類型嗎?

而我如何在我的sql模式中有十進制類型的一些字段,我該怎麼做或我能做些什麼?

+1

[蒙戈3.4增加了對十進制數據類型支持]( http://stackoverflow.com/a/40986686/1090562) –

回答

28

MongoDB中以二進制格式存儲數據稱爲BSON支持這些數值數據類型:

  • int32 - 4個字節(32位帶符號整數)
  • int64 - 8個字節(64位帶符號整數)
  • double - 8個字節(64位IEEE 754浮點)

有沒有準確值的定點相當於MongoDB中的mySQL的decimal類型,但是您可以將Mongo中的64位浮點數作爲double存儲。

值得一提的是,MongoDB shell(作爲JavaScript shell)並未識別整數值和浮點值之間的區別,它將所有數字視爲相同,因爲JavaScript將所有數字表示爲64位浮點數,無論的基礎BSON類型。

然而,大多數MongoDB language drivers在整數類型和浮點類型之間進行了區分。

+2

對於重視計算的人來說,它是IEEE 754浮點的事實非常重要。令人驚訝的是,即使[Matlab](http://www.mathworks.com/support/solutions/en/data/1-79FEJH/index.html?product=ML&solution=1-79FEJH)也不支持! – meawoppl

1

它具有,Introduction

的值是

  • 基本類型像字符串,整數,浮點數,時間戳,二進制等,
  • 一個文件,或
  • 一組數值
0

實際上MongoDB中的每個數字都是一個64位的浮點數。問題出現在Javascript shell無法表示某些浮點值。你不應該有任何問題將你的浮點數,雙精度或小數轉換爲Mongo中的數字。

3

克里斯已經提供了有關浮點類型,所以我只是補充關於Decimal data type這是在蒙戈3.4

3中添加信息。4增加了對新的十進制數據類型的decimal128格式的支持。 decimal128格式支持最多34位十進制 數字(即有效數字)和指數範圍-6143至 +6144。

與雙數據類型不同,它只存儲十進制值的近似值,十進制數據類型存儲精確值。對於 例如,十進制NumberDecimal(「9.99」)具有9.99 精確值,其中作爲雙重9.99將具有 9.9900000000000002131628近似值...