[英]How to use aggregation to pull information from a nested array on objects in mongoDB
我正在嘗試掌握 mongoDB 中的聚合,我是新手,我想我有點迷路了。 我有一個用戶集合,每個用戶都有一個社交網絡數組,這個數組中的每個項目都是一個對象。 我如何僅從給定的社交網絡/對象/對象中獲取價值。
{
"user":{
"_id": "d10430c8-e59",
"username": "John",
"password": "f7wei93",
"location": "UK",
"gender": "Male",
"age": 26,
"socials": [
{
"type": "instagram",
"maleFollowers": 23000,
"femaleFollowers": 65000,
"posts": 5400,
"avgFollowerAge": 22
},
{
"type": "facebook",
"maleFollowers": 4000,
"femaleFollowers": 6700,
"posts": 330,
"avgFollowerAge": 25
},
{
"type": "snapchat",
"maleFollowers": 873,
"femaleFollowers": 1200,
"posts": 1200,
"avgFollowerAge": 21
},
]
}
}
我想獲取數組中給出的每種社交網絡類型的 totalFollowersCount(maleFollowers + femaleFollowers)。 例如 ["instagram", "snapchat"] 只會給我這兩個特定網絡的 totalFollowersCount。
我開始玩聚合,但一直沒有弄明白。
首先,我們需要展平socials
數組。 然后,我們按社交type
+ 'user' 字段和sum( maleFollowers + femaleFollowers)
。
使用$match
運算符,我們過濾所需的社交網絡。
db.users.aggregate([
{
$unwind: "$user.socials"
},
{
$group: {
_id: {
user: "$user._id",
type: "$user.socials.type"
},
"totalFollowersCount": {
$sum: {
$add: [
"$user.socials.femaleFollowers",
"$user.socials.maleFollowers"
]
}
}
}
},
{
$match: {
"_id.type": {
$in: [
"instagram",
"snapchat"
]
}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.