7

私は次のように2つのマングーススキーマを持っています:

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

チームにクエリを実行すると、仮想的に生成されたチームも取得します。

Teams.find({}, function(err, teams) {
  JSON.stringify(teams); /* => [{
      name: 'team-1',
      squad: [{ name: 'player-1' } , ...]
    }, ...] */
});

しかし、非同期呼び出しが必要なため、仮想を使用してこれを取得することはできません。

teamSchema.virtual('squad').get(function() {
  Players.find({ team_id: this._id }, function(err, players) {
    return players;
  });
}); // => undefined

この結果を達成するための最良の方法は何ですか?

ありがとう!

4

1 に答える 1

4

これは、呼び出し元が非同期結果を受信するためのコールバックを提供できるように、追加するインスタンスメソッドとしておそらく最適に処理されます。teamSchema

teamSchema.methods.getSquad = function(callback) {
  Players.find({ team_id: this._id }, callback);
});
于 2013-02-14T15:16:19.927 に答える