У меня очень простая база данных в 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].
Может ли кто-нибудь помочь мне или дать мне подсказку, что я могу проверить, чтобы узнать, что происходит?
Спасибо!