Tengo un esquema para los productos. Quiero poder consultarlos y ordenar el descuento. El precio se representa con una matriz llamada precio, el último elemento es el valor más nuevo. Es decir, quiero el producto con el descuento más alto primero en la consulta.
Esquema:
const mongoose = require('mongoose'); const ProductsSchema = new mongoose.Schema( { productName: { type: String, }, price: [ { date: { type: String, }, value: { type: Number, }, }, ], }, { collection: 'products' } ); const products = mongoose.model('products', ProductsSchema); module.exports = products;consulta1
aggregate( [{"$set": {"discount": {"$cond": [{"$lte":[{"$size":"$price"}, 1]}, 0, {"$subtract": [{"$last":"$price.value"}, {"$arrayElemAt": ["$price.value", {"$subtract": [{"$size":"$price"}, 2]}]}]}]}}}, {"$sort":{"discount":-1}}])consulta2
*puedes reemplazar $last con $max para obtener el descuento máximo de todos los tiempos
aggregate( [{"$set": {"discount": {"$cond": [{"$lte":[{"$size":"$price"}, 1]}, 0, {"$subtract": [{"$last":"$price.value"}, {"$min":"$price.value"}]}]}}}, {"$sort":{"discount":-1}}])