2017-02-16 5 views
0

У меня очень простая база данных в MongoDB, а часть ее состоит из пользователей и игр. Что-то вроде этого:

const GameSchema = new Schema({ 
    mode: Number 
}); 

const UserSchema = new Schema({ 
    username: String, 
    games: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'game' 
    }] 
}); 

Итак, теперь, когда я создаю игру, я хочу также обновить пользователей в игре, добавив _id. Например, если я создаю игру с _id 778, и эта игра будет воспроизводиться пользователями с _ids 111 и 222, тогда у этих пользователей будет обновлено их игровое свойство, чтобы добавить 778.

В то же время один и тот же пользователь мог играть в разные игры, поэтому игровые игры будут развиваться, игры: [778] => [778,889] => [778,889,901] и т. д.

Для этого я использую промежуточное ПО Mongoose.

GameSchema.post('save', function(doc, next) { 
    const User = mongoose.model('user'); 

    Game.findById(doc._id) 
    .populate('players') 
    .then(game => { 
     let userIds = // retrieve the ids of the users playing the game 

     if (userIds.length) { 
     User.update(
      { _id: { $in: userIds } }, 
      { $push: { games: this._id } }, 
      { safe: true, multi: true } 
     ) 
      .then((data) => { 
      console.log('updated users', data); 
      // here it says that both users were updated 
      next(); 
      }); 
     } else { 
     next(); 
     } 
    }); 
}); 

Дело в том, что игры могут иметь 2 игрока или 1 игрок, и в этом последнем случае это работает отлично, но когда есть 2 пользователей обновить, вместо обновления игры, чтобы добавить новые значения, его в основном перезаписывает весь массив, поэтому он идет [778] => [889] => [901].

Может ли кто-нибудь помочь мне или дать мне подсказку, что я могу проверить, чтобы узнать, что происходит?

Спасибо!

ответ

0

Я только что понял, что происходит, это была моя ошибка.

Это было правильно обновлено в базе данных, но поскольку User.update находится в промежуточном программном обеспечении, я не возвращал обновленные записи, поэтому мои объекты в моем веб-приложении не обновлялись.

Итак, когда новая игра была создана для двойников, я отредактировал пользователей, чтобы добавить контрольную информацию, и, следовательно, переписывал значения игр.

Извинения за этот вопрос, глупые ошибки.

Смежные вопросы