我正在尝试掌握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。
我开始尝试聚合,但一直没有弄明白。
发布于 2020-03-28 18:13:08
首先,我们需要展平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"
]
}
}
}
])https://stackoverflow.com/questions/60899668
复制相似问题