Как MongoDB Compass работает с int64? - PullRequest
1 голос
/ 01 июля 2019

Я прочитал официальную документацию по int64 и мне нужно использовать упаковщик NumberLong для int64. Но я считаю, что есть некоторые специальные значения, которые можно использовать без NumberLong: enter image description here

В моем изображении, я думаю, что MongoDB Compass будет обрабатывать 1128505640310804481 как двойной, как Javascript, и использовать раунд 1128505640310804500 (это то, что я получаю из Javascript). Данные в БД отображаются в int64, поэтому я думаю, что 1128505640310804481 правильно хранится как int64. Так как 1128505640310804500 не равно 1128505640310804481, я думаю, что я не должен найти данные, соответствующие моему фильтру, но MongoDB Compass дает мне результат.

Так что мой вопрос: когда я ввожу int64 в MongoDB Compass Filter, как на картинке, как он работает с int64 и почему он может соответствовать правильным данным int64, хранящимся в БД?

1 Ответ

0 голосов
/ 05 июля 2019

когда я ввожу int64 в MongoDB Compass Filter, как на картинке, как он работает с int64 и почему он может соответствовать правильным данным int64, хранящимся в БД?

Для начала сMongoDB может хранить 64-битное целочисленное значение, поскольку данные хранятся в формате BSON (двоичный формат сериализации).Это решает проблему на сервере.Смотрите также Типы BSON .

Теперь для MongoDB Compass он может определить тип номера (int32, int64 или Double) путем автоматического приведения.Он обнаруживает значение в редакторе, когда int32 редактируется до значения, превышающего 32 бита, и значение передает +/- Number.isSafeInteger , затем оно преобразуется в int64.

Часть MongoDB Compass, которая выполняет проверку типов, фактически была с открытым исходным кодом.См. Код проверки типов: mongodb-js / hadron-type-checker / blob / master / src / type-checker.js .Пакет NPM - адронный тип проверки .

...