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

Posted

技术标签:

【中文标题】更新 mongo 文档数组中的单个子文档的计数【英文标题】:Updating count of individual sub document that's in an array of a mongo document 【发布时间】:2019-08-02 01:31:10 【问题描述】:

因此,现在的示例是针对 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】:

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

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

【讨论】:

以上是关于更新 mongo 文档数组中的单个子文档的计数的主要内容,如果未能解决你的问题,请参考以下文章

Mongo 聚合计数子文档(计数回复评论)

Mongo 计数所有集合文档中出现的数组项

mongo db:从对象数组中获取子数组,其值在单个文档的范围内

查找 mongo 文档计数的最佳做法是啥?

MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入

为啥mongo计数不加起来?