My solution is to use the conversion 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; } } });
Without filling:
Enter
{ "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": "404d1d9f68c3bb386b50f440" // ObjectId "away": "504d1d9f68c3bb386b50f450" // ObjectId }
Output
{ "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "homeId": "404d1d9f68c3bb386b50f440" "awayId": "504d1d9f68c3bb386b50f450" }
With filling:
Enter
{ "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": "404d1d9f68c3bb386b50f440" // ObjectId "away": "504d1d9f68c3bb386b50f450" // ObjectId }
Output
{ "_id": "sD95OhsGrWVIqmTLVeuQdkna", "leagueID": 1000, "home": { "_id": "404d1d9f68c3bb386b50f440", "name": "Home" } "away": { "_id": "504d1d9f68c3bb386b50f450", "name": "Away" } }
source share