[英]Rename populate returned values Mongoose
我正在尝试返回返回的属性,就像在Mysql
的AS
。 但具有重命名的对象属性。
询问
Games.find({leagueID:leagueID, result:{$ne: null}}).populate('home_id away_id').sort({date: -1}).execAsync()
输出
{
home_id: {
...some details
},
away_id: {
...some details
}
}
期望输出
{
home: {
...some details
},
away: {
...some details
}
}
那么我怎样才能得到想要的结果呢?
您可以使用聚合并像这样操作输出字段
db.collection.aggregate([{ $project:{_id:0, home:"$home_id", away:"$away_id"} }])
我的解决方案是使用转换功能。
GamesSchema.set('toJSON', {
transform: function(doc, ret, options) {
if (mongoose.Types.ObjectId.isValid(ret.home)) {
ret.homeId = ret.home;
delete ret.home;
}
if (mongoose.Types.ObjectId.isValid(ret.away)) {
ret.awayId = ret.away;
delete ret.away;
}
}
});
没有人口:
输入
{
"_id": "sD95OhsGrWVIqmTLVeuQdkna",
"leagueID": 1000,
"home": "404d1d9f68c3bb386b50f440" // ObjectId
"away": "504d1d9f68c3bb386b50f450" // ObjectId
}
输出
{
"_id": "sD95OhsGrWVIqmTLVeuQdkna",
"leagueID": 1000,
"homeId": "404d1d9f68c3bb386b50f440"
"awayId": "504d1d9f68c3bb386b50f450"
}
随着人口:
输入
{
"_id": "sD95OhsGrWVIqmTLVeuQdkna",
"leagueID": 1000,
"home": "404d1d9f68c3bb386b50f440" // ObjectId
"away": "504d1d9f68c3bb386b50f450" // ObjectId
}
输出
{
"_id": "sD95OhsGrWVIqmTLVeuQdkna",
"leagueID": 1000,
"home": {
"_id": "404d1d9f68c3bb386b50f440",
"name": "Home"
}
"away": {
"_id": "504d1d9f68c3bb386b50f450",
"name": "Away"
}
}
试试 lodash 的 _.mapKeys,像这样:
const newObject = _.mapKeys(oldObject.toJSON(), (value, key) => {
if (key === 'oldKey') return 'newKey';
return key;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.