1

I have a document structure like this:

{
  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'
}

I need to aggregate the documents for a particular reading type. For example, the result of aggregation for reading type with temperature should be like following:

[
  [130, '2021-01-05T10:28:49.070Z'],
  [123, '2021-01-05T10:32:50.727Z']
]

How can I do this with an aggregation pipeline or something?

1 Answer 1

1

You can't output an array of arrays from an aggregate pipe. But you can output an object with a single array field. Ie:

[
  {data: [130, '2021-01-05T10:28:49.070Z']},
  {data: [123, '2021-01-05T10:32:50.727Z']}
]

Here's a pipe that does just that https://mongoplayground.net/p/7UPyUICOncq

let result = await collection.aggregate([
    {$unwind: '$readings'},
    {$match: {
      'readings.t': 'temperature'
    }},
    {"$project": {
        _id: 0,
        data: ['$readings.r', '$created_at']
    }}
])

Then to reach your desired format just map the output

let formattedResult = result.map(({data}) => data)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.