Tengo una estructura de documento como esta:
{ readings: [ { t: 'temperature', r: 130 }, { t: 'humidity', r: 100 } ], created_at: '2021-01-05T10:28:49.070Z' }, { readings: [ { t: 'temperature', r: 123 }, { t: 'humidity', r: 456 } ], created_at: '2021-01-05T10:32:50.727Z' } Necesito agregar los documentos para un tipo de lectura en particular. Por ejemplo, el resultado de la agregación para el tipo de lectura con temperature debería ser como el siguiente:
[ [130, '2021-01-05T10:28:49.070Z'], [123, '2021-01-05T10:32:50.727Z'] ]¿Cómo puedo hacer esto con una tubería de agregación o algo así?
No puede generar una matriz de matrices desde una tubería agregada. Pero puede generar un objeto con un solo campo de matriz. Es decir:
[ {data: [130, '2021-01-05T10:28:49.070Z']}, {data: [123, '2021-01-05T10:32:50.727Z']} ]Aquí hay una tubería que hace exactamente eso https://mongoplayground.net/p/7UPyUICOncq
let result = await collection.aggregate([ {$unwind: '$readings'}, {$match: { 'readings.t': 'temperature' }}, {"$project": { _id: 0, data: ['$readings.r', '$created_at'] }} ])Luego, para alcanzar el formato deseado, simplemente asigne la salida
let formattedResult = result.map(({data}) => data)