#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" } } } } } ])