猫鼬不会填充数组或对象

时间:2020-02-17 15:25:52

标签: node.js express mongoose schema populate

我遇到一个具有Fixtures模式的问题,

const FixtureSchema = mongoose.Schema({
  home: {
    club: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'club'
    },
    score: {
      type: Number,
      default: 0
    },
    scorers: [
      {
        player: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'player'
        }
      }
    ]
  },
  away: {
    club: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'club'
    },
    score: {
      type: Number,
      default: 0
    },
    scorers: [
      {
        player: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'player'
        }
      }
    ]
  },
  match_num: {
    type: Number,
    required: true
  },
  date: {
    type: Date,
    default: Date.now()
  }
});

module.exports = Fixture = mongoose.model('fixture', FixtureSchema);

俱乐部模式:

const ClubSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  }
});

module.exports = Club = mongoose.model('club', ClubSchema);

玩家模式:

const PlayerSchema = new mongoose.Schema({
  name: {
    type: String,
    require: true
  },
  club: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'club'
  },
  stats: {
    starts: {
      type: Number,
      default: 0
    },
    goals: {
      type: Number,
      default: 0
    },
    assists: {
      type: Number,
      default: 0
    },
    goal_streak: {
      type: Number,
      default: 0
    }
  }
});

module.exports = Player = mongoose.model('player', PlayerSchema);

我这样请求:

router.get('/', async (req, res) => {
  try {
    const fixture = await Fixture.find()
      .populate('player', ['name'])
      .populate('club', ['name']);
    res.json(fixture);
  } catch (err) {
    console.error(err.message);
  }
});

邮递员获得请求给了我:

[
    {
        "home": {
            "score": 1,
            "club": "5e3dfcffb52ec61c30fc44cd",
            "scorers": [
                {
                    "_id": "5e4aac5d81d92b368398bd4d",
                    "player": "5e3dfddd4884f51cb7ee61e9"
                }
            ]
        },
        "away": {
            "score": 0,
            "club": "5e3dfd18b52ec61c30fc44ce",
            "scorers": []
        },
        "date": "2020-02-17T15:07:57.229Z",
        "_id": "5e4aac5d81d92b368398bd4c",
        "match_num": 1,
        "__v": 0
    }
]

为什么不填写球员或俱乐部的名称???当它没有存储在数组或对象中时,它就可以工作。我尝试过寻找其他主题的建议,但找不到与此相关的任何东西。

感谢您的答复和建议

1 个答案:

答案 0 :(得分:0)

结果与其他问题相同!!!大声笑..

如果我更改:

 .populate('club', ['name']);

.populate('home.club', ['name']);

,依此类推 它解决了...