Database mongodb阵列聚合提取到父级
我试图从mongodb对象的内部数组中获取第一个日期,并使用聚合将其添加到其父对象中。例如:Database mongodb阵列聚合提取到父级,database,mongodb,nosql,aggregate,aggregation,Database,Mongodb,Nosql,Aggregate,Aggregation,我试图从mongodb对象的内部数组中获取第一个日期,并使用聚合将其添加到其父对象中。例如: car: { "model": "Astra", "productions": [ "modelOne": { "dateOfCreation": "2019-09-30T10:15:25.026+00:00", "dateOfEstimation": "2017-09-30T10:15:25.026+00:00", "someOnterInfo":
car: {
"model": "Astra",
"productions": [
"modelOne": {
"dateOfCreation": "2019-09-30T10:15:25.026+00:00",
"dateOfEstimation": "2017-09-30T10:15:25.026+00:00",
"someOnterInfo": "whatever"
},
"modelTwo": {
"dateOfCreation": "2017-09-30T10:15:25.026+00:00",
"dateOfEstimation": "2019-09-30T10:15:25.026+00:00",
"someOnterInfo": "whatever"
}
]
}
上缴
car: {
"model": "Astra",
"earliestDateOfEstimation": "2017-09-30T10:15:25.026+00:00",
"earliestDateOfCreation": "2017-09-30T10:15:25.026+00:00"
}
如何实现这一点?我假设在开始聚合时,
modelOne
和modelTwo
是未知的。关键的一步是与一起运行,以消除这两个值。然后,您可以使用获取“最早”值:
编辑:
如果总是有modelOne
,“modelTwo”。。。(固定号码)
不,它们不是unknown@IntoTheDeep好的,所以它变得有点容易了。阵列有500个项目呢?嗨,问题是我有多辆车。所以,当我添加输入:“$productions”时,它不起作用。你能编辑你的帖子并显示你的真实数据以及如何计算值吗?
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" },
}
}
])
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" },
}
}
])