如何使用Node.js在MongoDB中存储大数字

时间:2011-12-23 14:39:40

标签: node.js mongodb mongoose

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

我正在使用猫鼬。我遇到的问题是,当我$inc过去2147483647时,它会将数字转换为double。如何强制Mongoose使用64位长整数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) {}
);

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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