Tengo una colección con campo de matriz:
{[ name:String buyPrice:Int sellPrice:Int ]}Estoy tratando de encontrar el precio mínimo y máximo de compra/venta. En algunas entradas, el precio de compra o venta es cero, por lo que necesito encontrar el precio mínimo pero mayor que cero. Aquí está mi consulta:
{ name: '$_id', maxBuyPrice: { $max: '$commodities.buyPrice' }, minBuyPrice: { $min: '$commodities.buyPrice' }, maxSellPrice: { $max: '$commodities.sellPrice' }, minSellPrice: { $min: '$commodities.sellPrice' } } No puedo usar el operador $match con $gt porque puedo perder entradas con valores máximos
$filter para iterar el ciclo de commodities.buyPrice array y obtener un precio filtrado mayor que 0$min en el resultado filtrado anterior$ifNull para verificar si el resultado anterior $min es nulo y luego devolver solo 0 { $project: { name: "$_id", maxBuyPrice: { $max: "$commodities.buyPrice" }, minBuyPrice: { $ifNull: [ { $min: { $filter: { input: "$commodities.buyPrice", cond: { $gt: ["$$this", 0] } } } }, 0 ] }, maxSellPrice: { $max: "$commodities.sellPrice" }, minSellPrice: { $ifNull: [ { $min: { $filter: { input: "$commodities.sellPrice", cond: { $gt: ["$$this", 0] } } } }, 0 ] } } }