Я предполагаю, что modelOne
и modelTwo
неизвестны, когда вы начинаете агрегацию. Ключевым шагом является запуск $ map вместе с $ objectToArray , чтобы избавиться от этих двух значений. Тогда вы можете просто использовать $ min , чтобы получить «самые ранние» значения:
db.collection.aggregate([
{
$addFields: {
dates: {
$map: {
input: "$car.productions",
in: {
$let: {
vars: { model: { $arrayElemAt: [ { $objectToArray: "$$this" }, 0 ] } },
in: "$$model.v"
}
}
}
}
}
},
{
$project: {
_id: 1,
"car.model": 1,
"car.earliestDateOfEstimation": { $min: "$dates.dateOfEstimation" },
"car.earliestDateOfCreation": { $min: "$dates.dateOfCreation" },
}
}
])
Пн go Детская площадка
РЕДАКТИРОВАТЬ:
Первый шаг можно упростить, если всегда есть modelOne
, 'modelTwo' ... (фиксированное число)
db.collection.aggregate([
{
$addFields: {
dates: { $concatArrays: [ "$car.productions.modelOne", "$car.productions.modelTwo" ] }
}
},
{
$project: {
_id: 1,
"car.model": 1,
"car.earliestDateOfEstimation": { $min: "$dates.dateOfEstimation" },
"car.earliestDateOfCreation": { $min: "$dates.dateOfCreation" },
}
}
])
Пн go Детская площадка (2)