How to store large numbers in MongoDB with Node.js

Problem

I am using MongoDB with the native node driver and need to accurately store numbers that may be larger than the int maximum 2147483647. I will need to be able to increment the number as I am tracking usage. What are my options?

I am using Mongoose. The problem I am having is that when I $inc past 2147483647 it converts the number to a double. How can I force Mongoose to use the 64-bit long int NumberLong?

My schema looks like this

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

And my $inc looks like this

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

Solution

You can now do this in Mongoose with the mongoose-long plug-in.

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

Discussion

MongoDB has a native 64-bit long integer type, usually called NumberLong (at least in the MongoDB javascript shell/driver). If you're using the node-mongodb-native driver, I believe it is just called Long (though I am not certain of this, someone please correct me if I'm wrong). $inc works as expected against fields of type NumberLong.

Discussion courtesy of: dcrosta

This recipe can be found in it's original form on Stack Over Flow.