我怎么能修改返回的记录格式
问题描述:
我得到了嵌套的结构与聚集后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"
}
答
尝试$project
做到这一点后
我的聚集查询与此类似
db.hitting_stats.aggregate(
[
{$lookup: {
from: 'players',
localField: 'name',
foreignField: 'name',
as: 'profile'
}
}
]
);
记录格式,添加它之后$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]
}
你好谢谢,这个解决方案肯定能行。然而,hitting_stats集合中有10多个字段,这些字段是可变的。有没有其他选择避免指定投影操作中的所有字段? – newBike
@newBike,['$$ ROOT'](https://docs.mongodb.org/manual/reference/aggregation-variables/)可以满足您的要求。 – zangw
@newBike,这里是一个相关的问题,http://stackoverflow.com/questions/20497499/mongodb-project-retain-previous-pipeline-fields?answertab=oldest#tab-top – zangw