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

131
Vistas
Cómo actualizar una matriz de números en mongoose

No puedo actualizar una matriz dentro de un documento en MongoDB (Mongoose). Aquí está mi definición para un modelo de stock.

 const ticker = new mongoose.Schema({ ticker: String, Price: Number, Amount: Number, PastPrices: [Number] }); export const stock = mongoose.model("Stocks", ticker);

Aquí hay un documento en MongoDB

 { "_id": { "$oid": "61e5d0e1dfda4d7c85dc8fe2" }, "PastPrices": [ 2 ], "ticker": "TSLA", "Price": 2, "Amount": 0, "__v": 0 }

Estoy ejecutando esto en mongoose y PastPrices no se actualiza. Quiero poder ingresar cada pocos segundos en esta matriz y luego representarla en un gráfico

 stock.updateOne({ticker: "TSLA"}, { $push: { PastPrices:1}} );

No recibo ningún error, pero simplemente no se actualiza.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

updateOne devuelve una consulta , que no ejecuta su actualización de inmediato. De la guía Mongoose para Consultas dice:

Una consulta de mangosta se puede ejecutar de dos maneras. Primero, si pasa una función de devolución de llamada, Mongoose ejecutará la consulta de forma asíncrona y pasará los resultados a la devolución de llamada.

Una consulta también tiene una función .then() y, por lo tanto, se puede usar como una promesa.

Lo que significa que puede pasar una función de devolución de llamada como en la documentación para ejecutar Consultas :

 const Person = mongoose.model('Person', yourSchema); // find each person with a last name matching 'Ghost', selecting the `name` and > `occupation` fields Person.findOne({ 'name.last': 'Ghost' }, 'name occupation', function (err, person) { if (err) return handleError(err); // Prints "Space Ghost is a talk show host". console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation); });

También puede usar then o exec si desea usar Promesas. De la documentación de Mongoose para promesas :

 const query = Band.findOne({name: "Guns N' Roses"}); assert.ok(!(query instanceof Promise)); // A query is not a fully-fledged promise, but it does have a `.then()`. query.then(function(doc) { // use doc }); // `.exec()` gives you a fully-fledged promise const promise = Band.findOne({name: "Guns N' Roses"}).exec(); assert.ok(promise instanceof Promise); promise.then(function (doc) { // use doc });

Si está en un método asíncrono, también puede await la consulta:

 await stock.updateOne({ticker: "TSLA"}, { $push: { PastPrices:1}} );
about 4 years ago · Juan Pablo Isaza Denunciar

0

Su consulta es correcta, pero para que la consulta devuelva datos actualizados, debe pasar la configuración adicional { new: true } . Si no lo pasa, la consulta actualizará los datos, pero devolverá datos antiguos.

 stock.updateOne( { ticker: "TSLA" }, { $push: { PastPrices:1 } }, { new: true } );
about 4 years ago · Juan Pablo Isaza 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