Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

172
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!