Как бороться с десятичными знаками в MongoDB v3.6 - PullRequest
0 голосов
/ 22 декабря 2018

Я работаю с MongoDB v3.6.3.

Я видел похожий вопрос , который получил хороший ответ.Так почему я задаю этот вопрос?

  1. Поскольку я работаю с другой версией MongoDB
  2. Поскольку я только что сохранил десятичное число в моей БД без регистрации каких-либо сериализаторов в соответствии с инструкциямив ответе аналогичный вопрос И не было выдано никакой ошибки.

Моя схема MongoDB выглядит следующим образом:

rating:{
    type: Number,
    required: true
}

Итак, мой вопрос:что-то не так с тем, как я это реализовал.Учитывая, что я уже сохранил десятичное число в моей БД.Можно ли хранить десятичные числа с текущей схемой?Или это настройка для ошибок в будущем, потому что я пропускаю шаг?

Спасибо.

1 Ответ

0 голосов
/ 23 декабря 2018

Тип Number - это числовое представление с плавающей запятой, которое не может точно представлять десятичные значения .Это может быть хорошо, если ваш вариант использования не требует точности для чисел с плавающей запятой, но не подходит, если точность имеет значение (например, для дробных значений валюты).

Если вы хотите хранить и работать с десятичной дробьюзначения с точностью, вы должны вместо этого использовать Decimal128 тип в Mongoose.Это соответствует типу данных BSON Decimal 128 (он же NumberDecimal), доступный в MongoDB 3.4+, который также можно использовать в вычислениях на стороне сервера с использованием Aggregation Framework.

Если вашПоле rating не требует точной точности, вы можете продолжать использовать тип Number.Одна из причин для этого заключается в том, что тип Number является родным для JavaScript, а Decimal128 - нет.

Подробнее см. Перспектива Node.js в MongoDB 3.4: Десятичный тип .

...