2015-09-25 12 views
5

Ich versuche, zurückgegebene Eigenschaften zurückzugeben, ähnlich wie in MysqlAS. Aber mit umbenannten Objekteigenschaften.Rename populate zurückgegebene Werte Mongoose

Abfrage

Games.find({leagueID:leagueID, result:{$ne: null}}).populate('home_id away_id').sort({date: -1}).execAsync() 

Ausgabe

{ 
    home_id: { 
     ...some details 
    }, 
    away_id: { 
     ...some details 
    } 
} 

gewünschte Ausgabe

{ 
    home: { 
     ...some details 
    }, 
    away: { 
     ...some details 
    } 
} 

So wie kann ich den Wunsch bekommen d Ergebnis?

+0

Wie über sie nur caliing „zu Hause“ und „weg“ zu beginnen, da die einzige Absicht, das zu sein scheint mit dem zugehörigen Objekt zu füllen. Ansonsten müssen Sie die zu Standardobjekten zurückgegebenen Mungo-Dokumente grundsätzlich konvertieren, neue Schlüssel erstellen, Daten kopieren und dann alte Schlüssel entfernen. Scheint, dass es nur logisch ist, das zu tun, was Sie wollen, ist das logischste, was Sie für Ihr Endergebnis tun können. –

Antwort

0

Sie können Aggregation verwenden und das Ausgabefeld zu manipulieren wie diese

db.colleaction.aggregate ([{$ Projekt: {_ id: 0, nach Hause: "$ home_id", weg: "$ away_id"}} ])

+0

Ich mag, wo das geht Rohit :) Aber wie kann ich das in meinem Beispiel verwenden –

+0

Können Sie das Beispieldokument freigeben oder Sie können versuchen, die "$ match" folgen von "$ project" –

0

Meine Lösung ist die Transformationsfunktion zu verwenden.

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

Ohne bevölkern:

Eingang

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

Ausgabe

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

Mit bevölkern:

Eingang

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

Ausgabe

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