node.js не понимает ничего, кроме номера из коробки, насколько мне известно.
Ну, это дизайнерское решение JavaScript. JavaScript только имеет тип Number
, то есть, если реализация соответствует рекомендации стандарта, represented as IEEE-754 double precision floating point number. Это скрывает большую часть сложности short
против long
против float
против double
и всех других числовых типов, которые распространены на большинстве других языков. Это также хороший компромисс, потому что они имеют целую точность до 2^53 - 1, поэтому вам редко нужно что-то вне этого диапазона, большую часть времени, и если вы это делаете, то long
обычно не режет его ...
MongoDB, с другой стороны, написан на C++ и, таким образом, намного ближе к подробным сведениям о том, как данные фактически хранятся в памяти. Преодоление этого разрыва не является тривиальным.
Есть ли модуль node.js, который позволяет моему приложению иметь те же типы, что и MongoDB?
В каком-то смысле вы сражаетесь с базовым языком программирования. Если бы такой модуль существовал, ему также пришлось бы каким-то образом реализовать целый ряд операций , например. длинное сложение (для результатов> 2^53-1) принципиально иным способом. Например, он мог бы сделать это, преобразовывая цифры в строку и добавляя отдельные цифры вручную, что было бы ужасно медленным.
Что-то подобное происходит в оболочке монго, например. для очень длинных целых чисел он использует синтаксис, например NumberLong("1223")
. Но он не переустанавливает операции , он возвращается к регулярному JavaScript V8. Доказательство:
> var foo = NumberLong("36028797018963968") // 2^55
> var foo2 = foo + NumberLong("1")
> foo2
36028797018963970 // should be 36028797018963969
В качестве альтернативы, такой модуль может быть собственный модуль, который использовал существующие реализации нативного языка программирования, таких как C++. Есть node module called 'edge' that apparently does it for C#. Тем не менее, это сопряжено с довольно сложной задачей, потому что для пересечения границ языка требуется marshalling, что дорого и сложно.
Другими словами: для получения действительно другого набора типов требуется другой язык программирования. Составляя свой код , примерно можно придерживаться вашей схемы, например. через mongoose или через кодирующую дисциплину, но это не сделает JS строго типизированным.
Кто голосовал бы, чтобы закрыть этот совершенно хороший вопрос? Это очень ясно, по теме и очень актуально. – Brad
серьезно, спасибо Брэду за поддержку мне –
Не совсем уверен, чего вы пытаетесь достичь, но мы действительно нашли мангуста очень полезным слоем для того, чтобы мы стандартизовали данные и типы данных. По крайней мере, имея схему, по крайней мере, представила согласованную схему между всеми. – CargoMeister