提问人:AlwaysJunior 提问时间:3/3/2022 最后编辑:AlwaysJunior 更新时间:3/3/2022 访问量:93
如何获得不同对象中两个值的平均值?
How to get average of two values which are in different objects?
问:
我的数据如下所示:
[
{
"_id": ObjectId("6213baa5a013b7c5f1232e23"),
"birthDate": ISODate("1973-05-01T13:30:15Z"),
"surname": "Johnson",
"name": "Emma",
"registerDate": ISODate("1900-06-11T17:30:15Z"),
"children": [
{
"birthDate": ISODate("1993-05-21T16:30:15Z"),
"surname": "Johnson",
"name": "Liam"
},
{
"birthDate": ISODate("1994-01-21T15:30:15Z"),
"surname": "Johnson",
"name": "Olivia",
"registerDate": ISODate("2019-09-14T12:30:15Z")
}
],
"city": "Houston"
}
]
我想计算有 registerDate 的人的注册年龄。在此示例中,我应该获得 Emma(父母)和 Olivia(孩子)的注册年龄平均值。我试过这个。
我计算了注册年龄并将它们添加为一个字段。我得到了奥利维亚的注册年龄。但是,我有 Emma 的重复注册年龄。我想使用其中之一。我怎样才能获得属于 Emma 和 Olivia 的注册年龄的平均数。我的意思是。您可以在添加的链接中看到这些值。(5+1)/2=3
答:
0赞
Dharmaraj
3/3/2022
#1
你可以先用它来获取ages数组。然后使用$avg
获得平均年龄。$map
$avg
忽略非数值,包括缺失值。如果平均值的所有操作数都是非数值,则返回,因为零值的平均值为 。$avg
null
undefined
[
{
"$addFields": {
"ages": {
"$map": {
"input": "$children",
"as": "child",
"in": {
$dateDiff: {
startDate: "$$child.registerDate",
endDate: "$$NOW",
unit: "year"
}
}
}
}
}
},
{
"$addFields": {
averageAge: {
"$avg": {
"$concatArrays": [
"$ages",
[
{
$dateDiff: {
startDate: "$registerDate",
endDate: "$$NOW",
unit: "year"
}
}
]
]
}
}
}
}
]
评论
0赞
AlwaysJunior
3/3/2022
缺少城市信息,有没有办法将城市添加到数据中?
0赞
Dharmaraj
3/3/2022
@JuniorDeveloper您能分享一下您正在运行的管道吗?我使用了addFields而不是project,因此不应该删除其他字段
0赞
AlwaysJunior
3/3/2022
mongoplayground.net/p/MzuK18jR4NP 这是我的管道。我将根据他们的城市计算所有有注册日期的人,即平均注册年龄。
0赞
Dharmaraj
3/3/2022
@JuniorDeveloper使用而不是像我的答案那样在第一阶段使用。$addFields
$project
评论