No puedo encontrar el promedio de una búsqueda compleja en mongodb, usando mongoose (nodejs) (y no estoy seguro de si es posible).
Entonces, tengo una colección de Scouts. Un Scout es básicamente el voto de un usuario por un jugador, en un partido (fixture). Los artículos de exploración se ven así:
{ "_id": "6036dbbd148ccf17e82e6f14", "player": "60243968d7ec0721344514ab", "user": "601e9c826a339228e8f54305", "fixture": "602435741f2e4e263492de66", "score": 7, "text": "Lorem ipsum", "likes": 92, "createdDate": "2021-02-24T23:05:33.176Z", "__v": 0 }, { "_id": "6036dbbd148ccf17e82e6f16", "player": "60243968d7ec0721344514ab", "user": "601e9c826a339228e8f54306", "fixture": "602435741f2e4e263492de66", "score": 1, "text": "Lorem ipsum", "likes": 76, "createdDate": "2021-02-24T23:05:33.181Z", "__v": 0 },Lo que necesito es: la puntuación media de un jugador en un partido (entre todos los usuarios). Y esto es lo que estoy intentando:
Scout.aggregate([ { $match: { $and: [ {player: mongoose.Types.ObjectId(req.params.playerId)}, {fixture: mongoose.Types.ObjectId(req.params.fixtureId)}, ]} }, { $group: { _id: "$_id", "avgScore": { "$avg": "$score" }}} ])Pero todo lo que obtengo como resultado es esto (que no es el resultado esperado; debería ser 4 como promedio):
{ "_id": "6036dbbd148ccf17e82e6f16", "avgScore": 1 }, { "_id": "6036dbbd148ccf17e82e6f14", "avgScore": 7 }]
Su agregación está bien, pero se está reagrupando en el documento por _id , que siempre será diferente, así que haga esto,
{ $group: { _id: null, "avgScore": { "$avg": "$score" } } }Pruébalo aquí: https://mongoplayground.net/p/6Qt8E69Z2d6