Tengo la siguiente colección Mongo.
[ { "query": "a", "page": "p1", "clicks": 10, "date": "x" }, { "query": "b", "page": "p1", "clicks": 5, "date": "x" }, { "query": "a", "page": "p1", "clicks": 5, "date": "y" }, { "query": "c", "page": "p2", "clicks": 2, "date": "y" }, ]La salida debería ser así:
[ { "page" : "p1", "most_clicks_query" : "a", "sum_of_clicks_for_query" : 15 }, { "page" : "p2", "most_clicks_query" : "c", "sum_of_clicks_for_query" : 2 }, ]Lógica para obtener esta salida :
Necesito el nombre de consulta que tiene la mayoría de los clics para cada página con suma de clics (para esa consulta)
lo que pido :
Aquí está la agregación que está buscando:
db.collection.aggregate([ { "$group": { "_id": { "page": "$page", "query": "$query" }, "sum_of_clicks_for_query": { "$sum": "$clicks" } } }, { "$project": { "_id": false, "page": "$_id.page", "most_clicks_query": "$_id.query", "sum_of_clicks_for_query": true } }, { $sort: { "sum_of_clicks_for_query": -1 } }, { $group: { _id: "$page", group: { $first: "$$ROOT" } } }, { $replaceRoot: { newRoot: "$group" } } ])Zona de juegos: https://mongoplayground.net/p/Uzk3CuSwVRM