Как сохранить десятичную высоту в MongoDB

#node.js #mongodb #mongoose #mongodb-query

#node.js #mongodb #мангуст #mongodb-запрос

Вопрос:

Я сталкиваюсь с этой странной проблемой при сохранении числовых значений в mongodb. Я сохраняю высоту людей в mongodb как число, поэтому человек с ростом 5′.1″ сохраняется как 5.1, а человек с ростом 5′.10″ также сохраняется как 5.1.

Я не могу изменить его на строку, потому что у меня есть мой поисковый запрос, основанный на number, («height»: {«$ gte»: req.body.height.minimum_height, «$ lte»: req.body.height.maximum_height}).

Я уверен, что должен быть способ сохранить определенные значения для обработки денежных транзакций, но я не уверен, как это сделать в моем сценарии.

Любые предложения приветствуются!!

Комментарии:

1. И в чем проблема? Или в чем ваш вопрос? БД хранит значения такими, какие они есть. Вы можете форматировать число в своем клиентском приложении. Или я что-то неправильно понял?

2. Какую версию MongoDB вы используете?

Ответ №1:

Поскольку высота уже является числом, было бы лучше обрабатывать ее в метрических единицах и следовать соглашению о том, что она представляет высоту в сантиметрах.

При получении высот, как @J.F. предложил в комментарии, его можно отформатировать в клиентском приложении или где бы то ни было, где это требуется.

При сохранении высоты ее можно преобразовать в сантиметры.

Например 5'10'' , становится (5 x 12 10) x 2.54 = 177.8

Ответ №2:

Одним из решений является использование двух полей: числового значения и отображаемого значения.

Для 5’10 » числовое значение 5 10/12 равно 5.83333…

 irb(main):001:0> 5 (10/12.0)
=> 5.833333333333333
  

Затем используйте числовое поле для поиска и вычислений и сохраняйте 5' 10" в поле отображения для отображения пользователям.

В качестве альтернативы вы можете сохранить только числовое значение и вычислить отображаемое значение:

 irb(main):007:0> i = (5.833333333333333 * 12).round; f = i / 12; i = i % 12
=> 10
irb(main):008:0> f
=> 5
irb(main):009:0> i
=> 10
irb(main):010:0> "#{f}' #{i}""
=> "5' 10""
irb(main):011:0>