【问题标题】:How does MongoDB Compass deal with int64?MongoDB Compass 如何处理 int64?
【发布时间】:2019-07-01 03:35:59
【问题描述】:

我已经阅读了有关 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 数据?

【问题讨论】:

    标签: javascript mongodb mongodb-compass


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢回复,如果我理解正确的话,如果像我的截图一样使用,可以在 MongoDB Compass 中输入 int64 值吗?
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2023-02-24
    • 2019-08-25
    • 2011-11-29
    • 2021-04-21
    相关资源
    最近更新 更多