【问题标题】:How to store large numbers in MongoDB with Node.js如何使用 Node.js 在 MongoDB 中存储大量数字
【发布时间】:2012-01-26 21:14:55
【问题描述】:

我正在使用带有本机节点驱动程序的 MongoDB,并且需要准确存储可能大于 int 最大值 2147483647 的数字。我需要能够在跟踪使用情况时增加该数字。我有哪些选择?

我正在使用猫鼬。我遇到的问题是,当我 $inc 超过 2147483647 时,它会将数字转换为双精度数。如何强制 Mongoose 使用 64 位 long int NumberLong

我的架构是这样的

var schema = new Schema({
    ...
    usedBandwidth: {type: Number, min: 0, default: 0}
});

而我的$inc 看起来像这样

model.Account.update(
    {_id: this.account},
    {$inc: {usedBandwidth: this.size}},
    function (err, doc) {}
);

【问题讨论】:

  • 我刚刚添加了更多信息和代码

标签: node.js mongodb mongoose


【解决方案1】:

您现在可以使用 mongoose-long 插件在 Mongoose 中执行此操作。

require('mongoose-long')(mongoose);
var SchemaTypes = mongoose.Schema.Types;
var schema = new Schema({
    ...
    usedBandwidth: {type: SchemaTypes.Long, min: 0, default: 0}
});

【讨论】:

  • 在使用es6的时候如何使用这个插件?
【解决方案2】:

MongoDB 有一个原生的 64 位长整数类型,通常称为 NumberLong(至少在 MongoDB javascript shell/驱动程序中)。如果您使用的是 node-mongodb-native 驱动程序,我相信它只是称为Long(虽然我不确定,如果我错了,请有人纠正我)。 $incNumberLong 类型的字段按预期工作。

【讨论】:

  • $inc 在 delta 值等于或大于 2^31 时无法按预期与 Mongoose(注意:不是 Mongo,而是 Mongoose)一起工作。然后,他们突然变成了双打。
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多