Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

672
Vistas
Extraer decimales de NumberDecimal con Mongo(ose)

En el modelo numérico para almacenar valores monetarios, los documentos de MongoDB establecen:

Desde el shell mongo, los valores decimales se asignan y se consultan mediante el constructor NumberDecimal().

De manera similar, cuando se usa la biblioteca Morphia Java, los BigDecimals se insertan automáticamente como BigDecimals.

Estoy consultando Mongo en Node con Mongoose e intentando extraer el valor numérico de un campo almacenado como NumberDecimal. Sin embargo, el valor está extrañamente envuelto en los resultados de la consulta y no estoy seguro de cómo extraerlo a través de Mongo o Mongoose:

 [ { "openValue":{ "$numberDecimal":"119.931" }, "timestamp":"2017-01-20T10:30:00.000Z" }, { "openValue":{ "$numberDecimal":"119.965" }, "timestamp":"2017-01-20T10:31:00.000Z" } ]

Una publicación que leí decía que usar parseFloat() en el código de mi aplicación realizará lo que deseo, sin embargo, no es eficiente iterar a través del resultado para realizar esta transformación. Evitar iterar y transformar significaría ejecutar la función en NumberDecimals siempre que quiera su valor cada vez, lo que sería molesto.

¿Hay alguna manera de que pueda usar Mongo o Mongoose para convertir el resultado de la consulta JSON anterior en lo que está a continuación?

 [ { "openValue": 119.931, "timestamp":"2017-01-20T10:30:00.000Z" }, { "openValue": 119.965, "timestamp":"2017-01-20T10:31:00.000Z" }, { "openValue": 119.975, "timestamp":"2017-01-20T10:32:00.000Z" } ]

Intenté seleccionar el campo como ...openValue.$numberDecimal , pero no funcionó. ¡Gracias!

Editar: Aquí está mi esquema Mongoose:

 var EquityHistoryModel = new Schema({ _id: { equityIdentifier: { type: { exchange: { type: String, index: true }, symbol: { type: String, index: true } }, index: true }, instant: { type: Date, index: true }, durationMinutes: { type: Number } }, open: { type: mongoose.Schema.Types.Decimal }, high: { type: mongoose.Schema.Types.Decimal }, low: { type: mongoose.Schema.Types.Decimal }, close: { type: mongoose.Schema.Types.Decimal }, volume: { type: Number }, isDividendAdjusted: { type: Boolean }, isSplitAdjusted: { type: Boolean } }, { collection: 'equityHistories', versionKey: false });

Aquí está la consulta Mongoose para el primer resultado JSON anterior:

 mongo.EquityHistoryModel.aggregate([ { "$match":{ "_id.equityIdentifier.exchange":passed_in, "_id.equityIdentifier.symbol":passed_in, "_id.instant":passed_in } }, { "$project":{ "_id":0, "openValue":"$open", "timestamp":"$_id.instant" } } ],
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

También puede sobrescribir el método toJSON :

 // Never return '__v' field and return the 'price' as String in the JSON representation // Note that this doesn't effect `toObject` EquityHistoryModel.set('toJSON', { getters: true, transform: (doc, ret) => { if (ret.price) { ret.price = ret.price.toString(); } delete ret.__v; return ret; }, });
over 4 years ago · Santiago Trujillo Denunciar

0

Al contrario de lo que esperaba, parece que los valores se extraen automáticamente. La cadena del resultado envuelve automáticamente el valor en NumberDecimal. Vea el código con la salida colocada manualmente a continuación:

 console.log(docs[0].openValue); 119.800 console.log(JSON.stringify(docs[0].openValue]); {"$numberDecimal":"119.800"}

Además, tuve problemas para enviar los resultados de la consulta, debido a res.json o res.send usando stringify. En su lugar, escribí una función de reemplazo y configuré la propiedad en Node.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda