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

175
Vistas
Encuentre artículos que sean iguales o menores que la cantidad recibida mangosta

Necesito devolver los elementos en los que el stock es menor o igual a la cantidad que recibo del pedido.

En mi documento de producto tengo una propiedad llamada stock que necesito comparar con la cantidad de producto que recibo por el pedido, que es un arreglo con la información del pedido.

Solicitud de datos: solicitud de datos

Para encontrar los productos con stock igual o menor a la cantidad que proviene de la solicitud, estoy haciendo lo siguiente:

 let productHasStock = async ( req, res, next ) => { const details = req.body.detail; let ids = []; let stock = []; const products = details.map( detail => { ids.push(detail._id), stock.push(detail.quantity) }); const product = await Product.find({ stock: { $lte: stock } }).where('_id').in(ids); }

Claramente, esto no funciona porque $lte requiere que le pases un número entero y aquí obtienes una matriz.

Si lo ejecuto de esta manera, obviamente funciona:

 const product = await Product.find({ stock: { $lte: 20} }).where('_id').in(ids);

Pero necesito saber cómo lograrlo con los datos que recibo de la solicitud usando la cantidad y validarlo contra el stock.

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

0

En primer lugar, está comparando acciones en findQuery con una matriz, ya que ha declarado acciones como matriz.

 let productHasStock = async ( req, res, next ) => { const details = req.body.detail; let ids = []; let stock = []; // here stock is array type const products = details.map( detail => { ids.push(detail._id), stock.push(detail.quantity) }); const product = await Product.find({ stock: { $lte: stock } }).where('_id').in(ids); // here you are comparing array it should be integer. }

Y, lógicamente, si tiene stock = ['5', '100'], ¿por qué está pasando una matriz mientras compara acciones en db? Como sabe, el valor más grande en stock es 100, por lo que debe comparar solo 100, ya que solo desea productos que tengan un stock inferior a 100.

 const product = await Product.find({ stock: { $lte: 100} }).where('_id').in(ids);

Y primero debe encontrar el más grande de la matriz y luego pasarlo a la consulta.

O si desea comparar el producto con la identificación y luego desea comparar el producto de identificación específico con el stock de ese producto, entonces lógicamente ese no es el buen enfoque que está utilizando. Así que escriba una canalización agregada en mongoose para encontrar el producto específico con id y compare también su stock.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Supongo que la consulta es para encontrar solicitudes de compra de acciones que no se pueden cumplir por completo. Cada solicitud puede ser una cláusula en el find "$or" . Por supuesto, aún necesitará transformar la solicitud de datos en la consulta de find .

 db.Product.find({ // Each data request is part of "$or" "$or": [ { "_id": 0, "stock": { "$lte": 200 } }, { "_id": 2, "stock": { "$lte": 100 } }, { "_id": 5, "stock": { "$lte": 500 } }, { "_id": 7, "stock": { "$lte": 300 } } ] })

Pruébalo en mongoplayground.net .

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