1

我已阅读有关 int64 的官方文档,我需要使用 NumberLong 包装器 int64。但我发现有一些特殊值可以在没有 NumberLong 的情况下使用: 在此处输入图像描述

在我的图像中,我认为 MongoDB Compass 会将 1128505640310804481 视为双精度,就像 Javascript 一样,并使用 1128505640310804500 轮次(这是我从 Javascript 中得到的)。DB中的数据以int64显示,所以我认为1128505640310804481正确存储为int64。由于 1128505640310804500 不等于 1128505640310804481,我想我应该找不到与我的过滤器匹配的数据,但是 MongoDB Compass 给了我结果。

所以我的问题是:当我像图片一样在 MongoDB Compass Filter 中输入 int64 时,它如何处理 int64 以及为什么它可以匹配存储在 DB 中的正确 int64 数据?

4

1 回答 1

1

当我像图片一样在 MongoDB Compass Filter 中输入 int64 时,它如何处理 int64 以及为什么它可以匹配存储在 DB 中的正确 int64 数据?

首先,MongoDB 可以存储 64 位整数值,因为数据存储为 BSON(二进制序列化格式)。这解决了服务器中的问题。另请参阅BSON 类型

现在,对于 MongoDB Compass,它能够通过自动转换来识别数字的类型(int32、int64 或 Double)。它检测编辑器中的值,当将 anint32编辑为超过 32 位的值并且该值通过Number.isSafeInteger的 +/-然后它转换为int64

进行类型检查的 MongoDB Compass 的一部分实际上是开源的。查看类型检查器代码:mongodb-js/hadron-type-checker/blob/master/src/type-checker.js。NPM 包是hadron-type-checker

于 2019-07-05T06:54:02.237 回答