2011-04-09 5 views
21

Je lance ma première application de test sur node.js/mongoDB/mongoose, il s'agit d'une application très simple qui a pour but d'enregistrer des caisses en DB et de les récupérer.Decimal/Float en mongoose pour node.js

créer un modèle comme:

var Car = new Schema({ 
    brand : String, 
    speed : Number, 
    date : { type: Date, default: Date.now } 
}); 

Cela fonctionne très bien, sauf que je voudrais être en mesure de fournir une valeur flottante pour la vitesse au lieu de l'entier un. J'ai donné un essai à Decimal et Float mais aucun d'eux ne fonctionne. Je n'ai pas trouvé dans la documentation non plus.

Une idée?

+0

'var voiture = voiture neuve ({marque:" ", vitesse: 0.5});' – skeggse

Répondre

29

Je ne suis pas du tout familier avec mongoose et node.js, mais j'ai cherché un peu et j'ai trouvé que pour stocker des valeurs float vous devez utiliser le type Number. Vous pouvez stocker n'importe quelle valeur flottante dans le champ speed. Article.

Espérons cette aide.

+0

merci beaucoup. Mais, dans cet article, il semble que c'est plutôt l'inverse, c'est-à-dire forcer un flottant dans un entier, n'est-ce pas? Désolé, j'ai peut-être mal compris la chose. – Luc

+1

@Luc: Exactement, dans l'article sur le flottement forcé dans un nombre entier. Mais cela signifie que vous pouvez stocker la valeur float dans le champ avec le type 'Number'. Donc, le type 'Number' devrait être utilisé pour les deux types: entier et flottant. –

+0

@ Bugain13, merci beaucoup, vous avez raison. Il y a quelque chose d'étrange que j'aurais dû faire parce que ça ne fonctionnait pas à la première place. Merci beaucoup pour votre aide !!!! – Luc

0

Alors que le mongoDB prend entièrement en charge le type flottant, le mongoose ne prend en charge que le type de nombre qui est entier. Si vous essayez d'enregistrer le nombre float mongoDB en utilisant mongooses type de Number, il sera converti en chaîne.

Pour faire le tri, vous aurez besoin de charger un plugin pour mongoose qui étendra ses types de valeur. Il y a quelques plugins qui fonctionnent le mieux avec des devises ou des dates, mais dans votre cas j'utiliserais https://www.npmjs.com/package/mongoose-double.

Votre modèle après des changements ressemblerait à quelque chose comme ceci:

var mongoose = require('mongoose') 
require('mongoose-double')(mongoose); 

var SchemaTypes = mongoose.Schema.Types; 
var Car = new Schema({ 
    brand: { 
     type: String 
    }, 
    speed: { 
     type: SchemaTypes.Double 
    }, 
    date: { 
     type: Date, 
     default: Date.now 
    } 
}); 

Hope it helps.

+2

Non ça ne va pas. Vous pouvez stocker des nombres comme 25.50 comme un nombre et il ne sera pas stocké comme une chaîne – JWindey

Questions connexes