[英]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.