重命名填充返回的值Mongoose

我试图返回返回的属性,很像在MysqlAS 。 但重命名的对象属性。

询问

 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.colleaction.aggregate([{$项目:{_ ID:0,主场: “$ HOME_ID”,走 “$ away_id”}}])

我的解决scheme是使用转换function。

 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; } } }); 

没有填充:

input

 { "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": "404d1d9f68c3bb386b50f440" // ObjectId "away": "504d1d9f68c3bb386b50f450" // ObjectId } 

产量

 { "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "homeId": "404d1d9f68c3bb386b50f440" "awayId": "504d1d9f68c3bb386b50f450" } 

随着填充:

input

 { "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": "404d1d9f68c3bb386b50f440" // ObjectId "away": "504d1d9f68c3bb386b50f450" // ObjectId } 

产量

 { "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": { "_id": "404d1d9f68c3bb386b50f440", "name": "Home" } "away": { "_id": "504d1d9f68c3bb386b50f450", "name": "Away" } }