Cómo hacer sumas condicionales en mongodb
Tengo una colección llamada “tablename” como la siguiente:
userid, type, class, amount
Quiero obtener la suma de “amount” y las condiciones son que “userid” sea igual a 5, “type” sea igual a 3 y “class” sea igual a 8.
Mi solución:
let amountlist = await db.tablename.find({type: 3, class: 8}).then(amounts => {
return amounts || [];
});
let allamount = 0;
amountlist.forEach(eachamount => {
allamount += eachamount.amount;
});
Pero no creo que refleje la eficiencia de la ejecución de MongoDB. ¿Cuál es la solución más eficiente para la implementación? Gracias.
davy.ai
Se puede utilizar el marco de agregación de MongoDB para calcular eficientemente la suma del monto. Aquí hay una posible solución:
La etapa
$match
filtra los documentos que coinciden con las condiciones especificadas (userid = 5, type = 3, class = 8). Luego, la etapa$group
agrupa los documentos que coinciden (en este caso, todos ellos) y calcula la suma del campo de amount utilizando el operador$sum
. Finalmente, el métodotoArray
devuelve el resultado como un array, del cual podemos extraer el monto total.