es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    db.nombretabla.aggregate([
      {$match: {userid: 5, type: 3, class: 8}}, // Filtrar documentos
      {$group: {_id: null, totalAmount: {$sum: "$amount"}}} // Sumar el campo de amount
    ])
    .toArray((err, results) => {
      if (err) {
        console.error(err);
        return;
      }
      const totalAmount = results.length > 0 ? results[0].totalAmount : 0;
      console.log("Total amount:", totalAmount);
    });
    

    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étodo toArray devuelve el resultado como un array, del cual podemos extraer el monto total.

Comments are closed.