Обновление количества отдельных вложенных документов, находящихся в массиве монго документа - PullRequest
1 голос
/ 11 марта 2019

Так что пример прямо сейчас для таблицы User. У меня есть вложенный документ UserWeapon, который представляет собой массив всего оружия, которое есть у пользователя, и сколько убийств он получил с помощью оружия. Я хочу написать запрос о том, что при получении идентификатора пользователя, оружия и новых убийств соответствующий документ будет обновлен соответствующим образом.

Так что-то вроде

const user = await User.findById(userId);
const userWeapon = await user.userWeapon.findById(weaponId);
userWeapon.kills = userWeapon.kills + newAmmountOfKills
user.save();

Какой самый эффективный способ сделать это?

Schemas:

const UserWeaponSchema = new Schema({
    weapon: { type: Schema.Types.ObjectId, ref: 'Weapon' },
    user: { type: Schema.Types.ObjectId, ref: 'User' },
    kills: {
        type: Number,
        required: true,
        unique: false,
    },
    deaths: {
        type: Number,
        required: true,
        unique: false
    },
    equippedSkin: {
        type: Schema.Types.ObjectId, ref: 'WeaponSkin',
        required: false,
    },
    ownedWeaponSkins: [{ type: Schema.Types.ObjectId, ref: 'WeaponSkin'}]
});

const UserSchema = new Schema({
    username: {
        type: String,
        required: true,
        unique: true,
    },
    password: {
        type: String,
        required: true,
    },
    weapons: [{
        type: Schema.Types.ObjectId, ref: 'UserWeapon'
    }],
});

1 Ответ

2 голосов
/ 11 марта 2019

Вы можете использовать оператор $ inc и запускать операцию обновления, например:

UserWeaponSchema.update({ weapon: weaponId, user: userId }, { '$inc': { 'kills': newAmmountOfKills } })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...