Трансформируйте монго аррариса

#arrays #mongodb #aggregation-framework

Вопрос:

У меня есть коллекция, которая содержит такие документы, как

 {  "_id": ObjectId("60f561eb0d022a4c614966c1"),  "vehicleId": 288,  "startTime": [  ISODate("2021-06-19T13:00:19Z"),  ISODate("2021-06-19T13:00:40Z")  ],  "odo": [0, 1116.0746443123298],  "location": [  { "type": "Point", "coordinates": [75.759973, 26.977889] },  { "type": "Point", "coordinates": [75.771209, 26.97858] }  ] }  

Я хочу изменить массив местоположений, чтобы документ выглядел так

 {  "_id": ObjectId("60f561eb0d022a4c614966c1"),  "vehicleId": 288,  "startTime": [  ISODate("2021-06-19T13:00:19Z"),  ISODate("2021-06-19T13:00:40Z")  ],  "odo": [0, 1116.0746443123298],  "locations": [  { loc: { "type": "Point", "coordinates": [75.759973, 26.977889] } },  { loc: { "type": "Point", "coordinates": [75.771209, 26.97858] } }  ] }  

то есть каждая запись становится объектом. Возможно, я захочу сделать то же самое с одо и временем начала.

Я экспериментирую с конвейерами агрегации, но я не нашел другого способа, кроме использования кода приложения для чтения и преобразования объекта.

Я бы предпочел сделать это только с помощью mongo, а не использовать приложение и анализировать документ за документом, поэтому любая помощь с использованием только mongo будет очень признательна.

Ответ №1:

Был бы этот:

 db.collection.aggregate([  {  $set: {  location: "$REMOVE",  locations: {  $map: {  input: "$location",  in: { loc: "$this" }  }  }  }  } ])