更新mongo文档数组中单个子文档的计数

时间:2019-03-11 17:01:35

标签: javascript database mongodb mongoose

所以现在的示例是针对User表的。我嵌入了一个UserWeapon文档,该文档包含用户拥有的所有武器以及使用该武器杀死的人数的数组。我想编写一个查询,当给定用户ID,武器ID和新的杀死对象时,它将相应地更新子文档。

类似

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

最有效的方法是什么?

模式:

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 个答案:

答案 0 :(得分:2)

您可以使用$inc运算符并运行更新操作,例如:

UserWeaponSchema.update({ weapon: weaponId, user: userId }, { '$inc': { 'kills': newAmmountOfKills } })