2011-12-23 26 views
8

Estoy usando MongoDB con el controlador de nodo nativo y necesito almacenar con precisión números que pueden ser mayores que el máximo int 2147483647. Tendré que poder incrementar el número como Estoy rastreando el uso. ¿Cuáles son mis opciones?Cómo almacenar números grandes en MongoDB con Node.js

Estoy usando Mangosta. El problema que estoy teniendo es que cuando I $inc después de 2147483647 convierte el número a un doble. ¿Cómo puedo obligar a Mangosta a usar el int de 64 bits NumberLong?

Mi esquema se parece a esto

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

Y mi $inc se parece a esto

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

acabo añade algo más de información y el código – respectTheCode

Respuesta

7

Ahora puede hacer esto en Mongoose con el plug-in mongoose-long.

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

MongoDB tiene un nativo de 64 bits de tipo entero largo, generalmente llamado NumberLong (al menos en el javascript MongoDB shell/driver). Si está utilizando el controlador node-mongodb-native, creo que simplemente se llama Long (aunque no estoy seguro de esto, alguien por favor corrígeme si me equivoco). $inc funciona como se esperaba contra los campos del tipo NumberLong.

+0

$ inc no funciona como se esperaba con la mangosta (nota: no Mongo, pero Mangosta) para los valores delta igual o más grande que 2^31. Entonces, de repente terminan convirtiéndose en Dobles. – arik

Cuestiones relacionadas