6
Ho due schemi mangusta come segue:Mongoose complessi (asincroni) virtuals
var playerSchema = new mongoose.Schema({
name: String,
team_id: mongoose.Schema.Types.ObjectId
});
Players = mongoose.model('Players', playerSchema);
var teamSchema = new mongoose.Schema({
name: String
});
Teams = mongoose.model('Teams', teamSchema);
Quando ho interrogare Squadre lo farei per ottenere anche la virtuale squadra generato:
Teams.find({}, function(err, teams) {
JSON.stringify(teams); /* => [{
name: 'team-1',
squad: [{ name: 'player-1' } , ...]
}, ...] */
});
ma I non può utilizzando i virtuals, perché ho bisogno di un asy nc chiamata:
teamSchema.virtual('squad').get(function() {
Players.find({ team_id: this._id }, function(err, players) {
return players;
});
}); // => undefined
Qual è il modo migliore per raggiungere questo risultato?
Grazie!
ma per esempio in un servizio CRUD in questo momento voglio ottenere l'elenco delle squadre con le squadre, devo teams.find -> loop su ogni squadra -> getSquad per ogni squadra -> creare un array clone di team (perché non posso iniettare nuovi attributi nell'array restituito) e iniettare la squadra per ogni squadra -> res.json (clonedArray)? – frx08
Usa ['lean()'] (http://mongoosejs.com/docs/api.html#query_Query-lean) nella tua query quando devi manipolare il risultato della tua query come fai qui. 'teams.find(). lean(). exec (cb)' – JohnnyHK
C'è una soluzione migliore oggi? – Linial