2011-10-07 37 views
24

Tôi đang di chuyển cơ sở dữ liệu mysql sang mongodb. Nhưng tôi đã đọc trong các kiểu dữ liệu MongoDb và sau đó không có tham chiếu đến các kiểu dấu phẩy động như float, double, decimal.MongoDB có hỗ trợ các loại điểm động không?

Và cách tôi có một số trường có loại thập phân trong lược đồ sql của tôi, làm cách nào tôi có thể làm hoặc tôi có thể làm gì?

+1

[Mongo 3.4 thêm hỗ trợ cho datatype thập phân] (http://stackoverflow.com/a/40986686/1090562) –

Trả lời

28

MongoDB lưu trữ dữ liệu trong một định dạng nhị phân gọi là BSON mà hỗ trợ các loại dữ liệu số:

  • int32 - 4 bytes (32-bit đã ký số nguyên)
  • int64 - 8 byte (số nguyên 64-bit ký)
  • double-8 bytes (64-bit IEEE 754 điểm nổi)

không có giá trị chính xác điểm cố định tương đương với loại decimal của mySQL trong MongoDB, nhưng bạn có thể lưu trữ số dấu phẩy động 64 bit ở Mongo dưới dạng double. Điều đáng nói đến là vỏ MongoDB - là một trình bao JavaScript - không nhận ra sự khác biệt giữa giá trị số nguyên và dấu phẩy động, nó xử lý tất cả các số giống nhau vì JavaScript đại diện cho tất cả các số dưới dạng dấu phẩy động 64 bit, bất kể loại BSON cơ bản của chúng.

Hầu hết MongoDB language drivers, tuy nhiên, tạo sự khác biệt giữa các loại số nguyên và dấu phẩy động.

+2

Thực tế là điểm nổi IEEE 754 là rất quan trọng đối với những người đánh giá cao tính toán tái sản xuất. Đáng ngạc nhiên ngay cả [Matlab] (http://www.mathworks.com/support/solutions/en/data/1-79FEJH/index.html?product=ML&solution=1-79FEJH) không hỗ trợ điều này! – meawoppl

0

MongoDB hỗ trợ lưu trữ tăng gấp đôi, nhưng không phải tất cả trình điều khiển đều cung cấp giao diện cho chúng vì một số lý do.

Từ http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions -

Mongo sử dụng các loại dữ liệu đặc biệt, thêm vào các loại JSON cơ bản của chuỗi, số nguyên, boolean, đôi, null, mảng, và đối tượng.

1

Nó có, Introduction

Giá trị là

  • loại hình cơ bản

    như chuỗi, số nguyên, phao, dấu thời gian, nhị phân, vv
  • một tài liệu, hoặc
  • một mảng giá trị
0

Thực ra mọi số trong MongoDB là số dấu phẩy động 64 bit. Vấn đề phát sinh từ vỏ Javascript không thể đại diện cho một số giá trị dấu phẩy động. Bạn không nên có bất kỳ vấn đề chuyển đổi phao của bạn, tăng gấp đôi hoặc số thập phân thành số trong Mongo.

3

Chris đã cung cấp thông tin về các loại dấu chấm động, vì vậy tôi sẽ chỉ cần thêm thông tin về Decimal data type đã được thêm vào Mongo 3,4

3.4 thêm hỗ trợ cho định dạng số thập phân với kiểu dữ liệu thập phân mới. Định dạng thập phân128 hỗ trợ các số có tối đa 34 số thập phân chữ số (nghĩa là chữ số có nghĩa) và phạm vi số mũ là −6143 đến +6144.

Không giống như kiểu dữ liệu kép, chỉ lưu trữ xấp xỉ giá trị thập phân , kiểu dữ liệu thập phân lưu trữ giá trị chính xác. Đối với Ví dụ, một NumberDecimal thập phân ("9,99") có một giá trị chính xác của 9,99 nơi như một đôi 9,99 sẽ có một giá trị xấp xỉ của 9,9900000000000002131628 ...

Các vấn đề liên quan