Tengo un back-end expreso de node.js con una base de datos mongodb en la nube (atlas mongodb). Este es el objeto Publicar y quiero obtener la calificación promedio de los comentarios de los revisores y los comentarios de los usuarios.
import mongoose from 'mongoose' const postSchema = mongoose.Schema({ game: { }, reviewerComments: [ { author: String, authorEmail: String, avatar: String, title: String, text: String, grade: Number, date: String } ], userComments: [ { author: String, authorEmail: String, text: String, grade: Number, date: String } ] }, { timestamps: true }) const Post = mongoose.model('Post', postSchema) export default PostTengo una ruta API que llama a esta función.
export const getAverageGrades = async (req, res) => { const { id } = req.query try { const post = await Post.aggregate([ { $match: { _id: mongoose.Types.ObjectId(`${id}`) } }, { $unwind: "$reviewerComments" }, { $group:{ _id:{ "comment_id": "$reviewerComments.id", "title": "$reviewerComments.title", "grade": "$reviewerComments.grade", }, avg_rating: {$avg:"reviewerComments.grade"} } }, { $project:{ "id": "$_id.rating_id", "title": "$_id.title", "avg_rating": "$avg_rating" // avg_rating returns null } } ]) res.status(200).json(post); } catch (error) { console.log(error.message) res.status(404).json({ message: error.message }); } }Esta función devuelve una respuesta donde avg_rating es nulo, ¿qué estoy haciendo mal?