【问题标题】:Why integer (Number) are saved as Double in MongoDb为什么整数(数字)在 MongoDb 中保存为 Double
【发布时间】:2018-06-04 14:58:20
【问题描述】:

我正在做一个新项目,我试图弄清楚为什么当 Mongoose 保存我的模型时,我得到的是一个 Double,而不是一个整数。

例如。 {myId: 12345678} 变为 {myId: 12345678.0}​

我的架构包含这个:

{
 myId: {
  type: Number
 }
}

猫鼬版本:5.x 节点:10.x

有什么想法吗?

【问题讨论】:

    标签: mongodb mongoose integer double


    【解决方案1】:

    Number 架构类型是浮点数。如果要将数字存储为整数,可以使用mongoose-int32插件:

    var Int32 = require('mongoose-int32');
    const schema = new mongoose.Schema({
      myId: {
        type: Int32
      }
    });
    

    如果您需要 64 位整数支持,请使用 mongoose-long 插件。

    【讨论】:

    • 为什么猫鼬本身不给出那个日期类型?
    • @Ashish 我也很惊讶数据类型不是 Mongoose 本身的一部分。尤其是插件的作者是 Mongoose 的主要开发者之一。
    • 感谢您的留言。同时,我使用了这个库:mongoose-longnpmjs.com/package/mongoose-long 它也很好用:)
    • @Vincent 两者都适用于整数; mongoose-long 是 64 位,mongoose-int32 是 32 位。
    • 讽刺的是mongodb和mongoose都默认不提供int类型
    【解决方案2】:

    建议在 Schema Types 中使用这样的 getter/setter,而不是额外的 npm 包开销。

    var numberSchema = new Schema({
      integerOnly: {
        type: Number,
        get: v => Math.round(v),
        set: v => Math.round(v),
        alias: 'i'
      }
    });
    

    因此,与Number Schema Type 字段相关的CRUD 操作将在Mongodb 中转换为Int32

    更多信息可以在Mongoose v5.8.9 Schema Types文档中找到

    【讨论】:

    • 这个解决方案对我不起作用。我也不想使用插件。
    猜你喜欢
    • 2021-09-26
    • 2013-12-03
    • 2021-09-29
    • 2014-12-26
    • 2014-06-10
    • 2020-05-19
    • 2016-11-05
    • 2011-07-13
    • 2019-11-06
    相关资源
    最近更新 更多