Buenos días,
He estado leyendo las consultas anteriores realizadas en el foro, pero hay algunos puntos en los que no logro discernir o interpretar cómo se deberían realizar los cálculos. Les pido de antemano disculpas si pregunto algo que ya fue abordado con anterioridad (seguramente sea porque no lo entendí al leerlo).
Mis consultas son las siguientes:
- Al definir mi aggregation pipeline, por ejemplo, con tres $lookups y un $project, ¿debo sumar 1 por cada stage (para acceder al doc por _id)? o sea, ¿debemos asumir que el documento de la colección llamada al principio se accede por id en cada stage de manera independiente, o un stage pasa al siguiente su resultado sin necesidad de búsqueda/acceso por parte del receptor (costo de acceso a doc posterior nulo)? En general estaba asumiendo lo segundo, pero la última respuesta de este foro me hizo dudar. Cabe aclarar que las consultas posteriores que realizo asumen lo segundo.
- En el caso del $lookup, el mismo accede a un documento en otra colección (tamaño M) y luego compara sus claves (las que se indique). Mi duda es si, además de M/2, ¿debo sumar 0.1*2, teniendo en cuenta el costo de acceder al id de cada documento?
- Para el $lookup, el/los documento/s encontrado/s que coincidan sus claves, se embeben en el doc original. En este caso, ¿es razonable considerar el costo de embeber como M*0.01, siendo M la cantidad de campos del esquema de la colección cuyos doc pasan a estar embebidos?, ¿o debo considerar lectura y escritura por separado y hacer M*(0.01)*(2)?
- ¿Tiene sentido considerar un $sort (antes de ningún $group) como un costo de 0.01 (para un solo atributo)? Lo pensamos así considerando que el aggregate va a acceder todos los documentos (la pregunta está muy relacionada con el punto 1). En el caso que este $sort esté después del $group, asumo que se deberá multiplicar el 0.01 por la cantidad de grupos.
- Respecto del $group, considerando que recorre todos los doc de la colección (relacionado al punto 1), ¿está bien computar el costo de la suma (por ejemplo, al hallar total_sales) como 0.01?