6
Tôi có hai schemas mongoose như sau:phức tạp (async) virtuals Mongoose
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);
Khi tôi truy vấn Đội tôi sẽ để có được cũng là ảo được tạo ra đội hình:
Teams.find({}, function(err, teams) {
JSON.stringify(teams); /* => [{
name: 'team-1',
squad: [{ name: 'player-1' } , ...]
}, ...] */
});
nhưng Tôi không thể nhận được điều này sử dụng virtuals, bởi vì tôi cần một số asy nc gọi:
teamSchema.virtual('squad').get(function() {
Players.find({ team_id: this._id }, function(err, players) {
return players;
});
}); // => undefined
Cách tốt nhất để đạt được kết quả này là gì?
Cảm ơn!
nhưng ví dụ như trong một dịch vụ CRUD vào lúc này tôi muốn nhận được danh sách các đội với đội, tôi phải đội.find -> vòng qua mỗi đội -> getSquad cho mỗi đội -> tạo ra một bản sao của các mảng nhóm (vì tôi không thể tiêm thuộc tính mới trong mảng được trả về) và tiêm đội hình cho mỗi đội -> res.json (clonedArray)? – frx08
Sử dụng ['lean()'] (http://mongoosejs.com/docs/api.html#query_Query-lean) trong truy vấn của bạn khi bạn cần thao tác kết quả truy vấn giống như bạn làm ở đây. 'teams.find(). lean(). exec (cb)' – JohnnyHK
Hôm nay có giải pháp nào tốt hơn không? – Linial