我在聚合后得到了profile
字段的嵌套结构,
我想展平个人资料结构,只保留名称字段。
我怎么能在聚合中做到这一点。
我的聚合查询与此类似
db.hitting_stats.aggregate(
[
{$lookup: {
from: 'players',
localField: 'name',
foreignField: 'name',
as: 'profile'
}
}
]
);
加入聚合后的记录格式
{"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'),
"author_id"=>113536670874,
...
"created_time"=>"2015-11-27T09:17:07+0000",
"profile"=>{"_id"=>BSON::ObjectId('566d93695e428410e5a33224'), "name"=>"DJ"}}
预期格式
{"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'),
"author_id"=>113536670874,
...
"created_time"=>"2015-11-27T09:17:07+0000",
"name"=>"DJ"
}
答案 0 :(得分:0)
尝试使用$project
执行此操作,在$lookup
{$lookup: {
from: 'players',
localField: 'name',
foreignField: 'name',
as: 'profile'
}
},
{$project: {
_id: '$_id',
author_id: 1,
created_time: 1,
name: '$profile.name'
}
}
正如布莱克斯在评论中指出的那样,输出$loopup
是'数组',更确切地说是
"name": {
"$arrayElemAt": [
{ "$map": {
"input": "$profile",
"as": "el",
"in": "$$el.name"
}},0]
}