2011-12-23 7 views
8

J'utilise MongoDB avec le pilote de nœud natif et j'ai besoin de stocker avec précision des nombres qui peuvent être plus grands que le maximum 2147483647 int. Je devrai pouvoir incrémenter le nombre comme Je suis suivi d'utilisation. Quelles sont mes options?Comment stocker de grands nombres dans MongoDB avec Node.js

J'utilise Mongoose. Le problème que j'ai est que quand je $inc passé 2147483647 il convertit le nombre en un double. Comment puis-je forcer Mongoose à utiliser l'int long 64 bits NumberLong?

Mon schéma ressemble à ceci

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

Et mon $inc ressemble à ceci

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

Je viens d'ajouter un peu plus d'informations et le code – respectTheCode

Répondre

7

Vous pouvez maintenant le faire dans Mongoose avec le 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 a un type long 64 bits natif entier, généralement appelé NumberLong (au moins dans le javascript MongoDB shell/pilote). Si vous utilisez le pilote node-mongodb-native, je crois que c'est juste appelé Long (bien que je ne sois pas certain de cela, quelqu'un s'il vous plaît corrigez-moi si je me trompe). $inc fonctionne comme prévu contre les champs de type NumberLong.

+0

$ inc ne fonctionne pas comme prévu avec Mongoose (note: non Mongo, mais Mongoose) pour les valeurs de delta égale ou supérieure à 2^31. Ensuite, ils finissent soudain par être convertis en doubles. – arik

Questions connexes