Пн goose не будет заполнять массив или объект - PullRequest
0 голосов
/ 17 февраля 2020

У меня проблема с тем, что у меня есть схема 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);

I сделать запрос как это:

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 голосов
/ 17 февраля 2020

Оказывается, это было так же, как и другие вопросы !!! lol ..

Если я изменю:

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

на

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

и так далее, это решит ...

...