2011-04-09 34 views
21

Comienzo mi primera aplicación de prueba en node.js/mongoDB/mongoose, esta es una aplicación muy simple que tiene como objetivo registrar crate en DB y recuperarlos.Decimal/Flotante en mangosta para node.js

puedo crear un modelo como:

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

Esto está trabajando muy bien, excepto que me gustaría ser capaz de proporcionar un valor flotante para la velocidad en lugar del número entero uno. Intenté Decimal y Float, pero ninguno de ellos funciona. No encontré en la documentación tampoco.

¿Alguna idea?

+0

'var car = new Car ({brand:" ", speed: 0.5});' – skeggse

Respuesta

29

No estoy familiarizado con mongoose y node.js en absoluto, pero he buscado un poco y encontré que para almacenar valores flotantes debe usar el tipo Number. Puede almacenar cualquier valor flotante en el campo speed. Article.

Espero que esta ayuda.

+0

muchas gracias. Pero, en este artículo, parece que es más al revés, es decir, para forzar un flotador en un número entero, ¿verdad? Lo siento, tal vez entendí mal la cosa. – Luc

+1

@Luc: Exactamente, en el artículo sobre forzar flotante en un número entero. Pero significa que puede almacenar el valor de flotación en el campo con el tipo 'Número'. Entonces, el tipo 'Number' debe usarse para ambos tipos: integer y float. –

+0

@ Bugain13, muchas gracias, tienes razón. Hay algo extraño que debería haber hecho porque no estaba funcionando en primer lugar. Muchas gracias por tu ayuda !!!! – Luc

0

Mientras que mongoDB es totalmente compatible con el tipo de flotador, la mangosta solo admite el tipo de número que es entero. Si intentas guardar en mongoDB el número flotante usando el tipo de mangostas de Número, se convertirá en cadena.

Para resolver esto, tendrá que cargar algún complemento para mangosta que ampliará sus tipos de valor. Hay algunos complementos que funcionan mejor con monedas o fechas, pero en su caso usaría https://www.npmjs.com/package/mongoose-double.

Su modelo después de los cambios sería algo como esto:

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 
    } 
}); 

espero que ayude.

+2

No, no lo hará. Puede almacenar números como 25.50 como un número y no se almacenará como una cadena – JWindey