Tengo un documento con la siguiente estructura.
{ "_id" : ObjectId(""), "review_id" : "1", "product_id" : "1", "date" : 1638869377, "rating" : 5, "title" : "lorem", "review" : "lorem", "updated_at" : ISODate("2021-12-07T07:10:55.732Z"), "created_at" : ISODate("2021-12-07T05:04:11.750Z") }Logré obtener la cantidad de comentarios de usuarios por mes. Pero quiero obtenerlo por separado para cada calificación.
Por ejemplo, en el décimo mes hay 7 comentarios y ¿cómo puedo obtener 2 de ellos 1 estrella, 3 de ellos 4 estrellas, 2 de ellos 5 estrellas?
{ "$group": { "_id": { "month": { "$month": { "$toDate": "$date" } } }, "reviews": { "$sum": 1 } } }Solo desea $group por ambos campos, el month y la rating , así:
db.collection.aggregate([ { "$group": { "_id": { "month": { "$month": { "$toDate": "$date" } }, rating: "$rating" }, "reviews": { "$sum": 1 } } } ])O mi recomendación solo para agregar un poco más de estructuración a la salida es usar esta canalización.
Puede agregar todo lo que desea agrupar dentro del campo _id . Solo agregar un nuevo campo con la calificación haría el trabajo.
{ "$group": { "_id": { "month": { "$month": { "$toDate": "$date" } }, "rating": "$rating" }, "reviews": { "$sum": 1 } } }Nota: También agregaría un grupo por año, para que pueda separar cada mes correctamente. Si no los agrega, Mongo los agrupará cada enero de cada año, por ejemplo.