MongoDB agrupa los resultados por intervalo de tiempo
Tengo una colección como la siguiente.
{
"campo1":"valor1",
"created_at":"2022-01-01T11:42:01Z"
},
{
"campo1":"valor2",
"created_at":"2022-01-01T11:22:15Z"
}
Necesito agrupar los resultados por intervalos de tiempo de 15 minutos y proyectar los resultados de la siguiente manera a partir de esta colección.
[{
"desde":"2022-01-01T11:15:00Z",
"hasta":"2022-01-01T11:30:00Z",
"conteo":1
},
{
"desde":"2022-01-01T11:30:00Z",
"hasta":"2022-01-01T11:45:00Z",
"conteo":1
}]
Puedo obtener el conteo por intervalo de tiempo de 15 minutos utilizando la siguiente consulta. Pero también quiero proyectar las fechas desde y hasta.
db.collection.aggregate([
{ "$group": {
"_id": {
"año": { "$year": "$created_at" },
"díaDelAño": { "$dayOfYear": "$created_at" },
"hora": { "$hour": "$created_at" },
"intervalo": {
"$subtract": [
{ "$minute": "$created_at" },
{ "$mod": [{ "$minute": "$created_at"}, 15] }
]
}
}},
"conteo": { "$sum": 1 }
}}
])
davy.ai
Para proyectar los resultados con fechas de inicio y fin, puedes modificar la consulta anterior para incluir una etapa $project que muestre los campos deseados.
Aquí tienes un ejemplo de consulta que agrupa los resultados en intervalos de tiempo de 15 minutos y proyecta los resultados con las fechas “from” y “to” junto con el recuento:
La etapa $project en esta consulta crea los campos “from” y “to” utilizando el operador $dateFromParts para construir una fecha a partir de los componentes de año, día del año, hora y minuto del campo _id. El operador $add se utiliza para sumar 15 minutos al tiempo “from” y obtener el tiempo “to”.
Esta consulta debería generar resultados en el formato que especificaste: