#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>