Javascript 快速选择多个模型数据

Javascript 快速选择多个模型数据,javascript,express,url-routing,mean-stack,Javascript,Express,Url Routing,Mean Stack,我正在学习平均堆栈,希望在使用express进行路由时选择多个模型。我需要选择一个模型,然后根据它的值选择其他几个模型。 以下是主要模型: var mongoose = require('mongoose'); var MatchSchema = new mongoose.Schema({ title: String, type: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Game' }], owner: [{ type

我正在学习平均堆栈,希望在使用express进行路由时选择多个模型。我需要选择一个模型,然后根据它的值选择其他几个模型。 以下是主要模型:

var mongoose = require('mongoose');
var MatchSchema = new mongoose.Schema({
    title: String,
    type: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Game' }],
    owner: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
    players: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]
});
mongoose.model('Match', MatchSchema);
基于类型所有者和玩家,我需要选择游戏和用户模型,但我一直坚持这样做。这是我当前的路线,它只选择匹配模型

router.get('/games', function (req, res, next) {
  Match.find(function (err, matches) {
    if (err) {
      console.log(err);
      return next(err);
    }

    res.json(matches);
  });
});

因此,我需要循环所有的比赛,并为每一场比赛选择属于它的类型的游戏模型和属于所有者和玩家的用户模型,我该如何做呢?

您可以使用嵌套代码,如

Match.find(function (err, matches) {
    if (err) {
      console.log(err);
      return next(err);
    }
    Game.find(function (err, games) {
        if (err) {
          console.log(err);
          return next(err);
        }
        Users.find(function (err, user) {
            if (err) {
              console.log(err);
              return next(err);
            }

            res.json({matches:matches, games:games, user:user});
          });
      });
  });

如果我理解您的问题是正确的,那么您必须填充子文档

猫鼬有能力为你做到这一点。基本上你必须这样做:

router.get('/games', function (req, res, next) {
    Match
    .find({})
    .populate('type').populate('owner').populate('players')
    .exec(function (err, matches) {
      if (err) return handleError(err);
      res.json(matches);
    });
});

有关更多信息,请查看mongoose文档:

我用更好的措辞编辑了这个问题。我已经尝试在所有匹配中使用while循环嵌套,但是收到了一个headers发送错误如果您有一个循环,并且在循环中使用此代码,那么您将面临这样的问题,因为您有res.json,它通过设置header返回responce。所以在这种情况下,您可以使用异步模块,在这里您将找到ref