我的資料看起來像:
[
{
"_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(parent) 和 Olivia(child) 的平均注冊年齡。我試過這個。我計算了注冊年齡并將它們添加為一個欄位。我得到了奧利維亞的注冊年齡。但是,我有重復的艾瑪注冊年齡。我想使用其中之一。如何獲得屬于 Emma 和 Olivia 的平均注冊年齡。我的意思是(5 1)/2=3。您可以在添加的鏈接中看到這些值。
uj5u.com熱心網友回復:
您可以先使用$map獲取年齡陣列。然后用于$avg獲取平均年齡。
$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"
}
}
]
]
}
}
}
}
]
蒙古游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437019.html
上一篇:MongoDB根據日期通過查找和管道將集合加入自身:在加入的結果集中沒有結果
下一篇:發送發布請求時出現重復密鑰錯誤
