Обновление mongodb не обновляется сразу - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь добавить объект User в поле моего игрового объекта Players_list, которое представляет собой список объектов User.Вот как выглядит мой игровой объект:

{ players_list:
   [ { games: [Array],
       _id: '5b0e112ff13033792f08566f',
       email: 'c',
       password: '$2a$10$iWOBvVf4KAPwbH7zDczfYeI5iXI721jQ7bN1juJ4Us3R.Lqetmhfu',
       handle: 'C',
       __v: 0,
       id: '5b0e112ff13033792f08566f' } ],
  _id: '5b0e181aeb766e7bfaf2fb09',
  players_status:
   [ { _id: '5b0e181aeb766e7bfaf2fb0a',
       playerId: '5b0e112ff13033792f08566f',
       status: 'Joined' } ],
  postGameEvaluation: [],
  date: 'QQQQ',
  time: 'QQQQ',
  duration: 4,
  players_needed: 4,
  max_players: 4,
  level: 4,
  author:
   { games:
      [ '5b0e13e69d35007a147578da',
        '5b0e15b4b117987b00d68cb4',
        '5b0e181aeb766e7bfaf2fb09' ],
     _id: '5b0e112ff13033792f08566f',
     email: 'c',
     password: '$2a$10$iWOBvVf4KAPwbH7zDczfYeI5iXI721jQ7bN1juJ4Us3R.Lqetmhfu',
     handle: 'C',
     __v: 0,
     id: '5b0e112ff13033792f08566f' },
  __v: 0 }

, и вот как выглядит мой пользовательский объект

{ games: [],
  _id: 5b0e1820eb766e7bfaf2fb0b,
  email: 'f',
  password: '$2a$10$JmS.9axW8batMUKzE7OQx.GShdNDt09eArXfYGoI/DUWEKVwAn5ju',
  handle: 'F',
  __v: 0 }

Затем я запускаю req.body.players_list.push(req.user), чтобы добавить объект пользователя в player_listполе игрового объекта.Вот как req.body выглядит после добавления объекта User:

{ players_list:
   [ { games: [Array],
       _id: '5b0e112ff13033792f08566f',
       email: 'c',
       password: '$2a$10$iWOBvVf4KAPwbH7zDczfYeI5iXI721jQ7bN1juJ4Us3R.Lqetmhfu',
       handle: 'C',
       __v: 0,
       id: '5b0e112ff13033792f08566f' },
     { games: [],
       _id: 5b0e1820eb766e7bfaf2fb0b,
       email: 'f',
       password: '$2a$10$JmS.9axW8batMUKzE7OQx.GShdNDt09eArXfYGoI/DUWEKVwAn5ju',
       handle: 'F',
       __v: 0 } ],
  _id: '5b0e181aeb766e7bfaf2fb09',
  players_status:
   [ { _id: '5b0e181aeb766e7bfaf2fb0a',
       playerId: '5b0e112ff13033792f08566f',
       status: 'Joined' } ],
  postGameEvaluation: [],
  date: 'QQQQ',
  time: 'QQQQ',
  duration: 4,
  players_needed: 4,
  max_players: 4,
  level: 4,
  author:
   { games:
      [ '5b0e13e69d35007a147578da',
        '5b0e15b4b117987b00d68cb4',
        '5b0e181aeb766e7bfaf2fb09' ],
     _id: '5b0e112ff13033792f08566f',
     email: 'c',
     password: '$2a$10$iWOBvVf4KAPwbH7zDczfYeI5iXI721jQ7bN1juJ4Us3R.Lqetmhfu',
     handle: 'C',
     __v: 0,
     id: '5b0e112ff13033792f08566f' },
  __v: 0 }

Итак, я обновляю объект Game в монго с помощью Post.findByIdAndUpdate(req.params.id, req.body).then((result) => {..., но результат не содержит нового пользователя.Вот как выглядит мой результат

{ players_list: [ 5b0e112ff13033792f08566f ],
  _id: 5b0e181aeb766e7bfaf2fb09,
  players_status:
   [ { _id: 5b0e181aeb766e7bfaf2fb0a,
       playerId: '5b0e112ff13033792f08566f',
       status: 'Joined' } ],
  postGameEvaluation: [],
  date: 'QQQQ',
  time: 'QQQQ',
  duration: 4,
  players_needed: 4,
  max_players: 4,
  level: 4,
  author: 5b0e112ff13033792f08566f,
  __v: 0 }

Странно то, что если я оставлю свой текущий React Component, а затем вернусь к нему (таким образом, вызывая fetchUser и fetchGame), то извлеченная Игра действительно имеетновый пользователь в его списке игроков.Это происходит потому, что функция обновления Монго является асинхронной?Тем не менее, я подумал, что .then((result) => { в Post.findByIdAndUpdate(req.params.id, req.body).then((result) => { убедился, что Post.findByIdAndUpdate завершен первым, прежде чем продолжить

1 Ответ

0 голосов
/ 30 мая 2018

Если вы посмотрите на документы: http://mongoosejs.com/docs/api.html#findbyidandupdate_findByIdAndUpdate, вы заметите, что findByIdAndUpdate возвращает исходный объект, а не обновленный документ.Вы должны передать {new: true} в качестве параметров для разрешения с обновленным объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...