我有体育运动员的数据库,其中包含他们的“技能”。例如数据库中的足球运动员有 14 种技能。每天我都模拟训练他们,所以当天训练的技能会增加一些。我的收藏有超过 150 万条记录,所以我进行批量更新。问题是使用 $inc,它可以设置超过限制的值,在我的例子中,技能限制是 100。 怎么给字段设置限制,超过限制就不再更新了?
我也尝试过在更新后“修复”技能,我的意思是在训练模拟完成后,我运行脚本来迭代所有玩家,如果它有一个超出值的字段,我会进行更新查询来修复它,但是进行 150 万次单独查询对服务器来说是致命的,那么还有其他方法吗?
编辑: 增加值在计算上有一些随机值,所以对所有玩家来说都不一样。但该值可以是从 0 到 1,四舍五入到第 2 位,例如它可以是 0.1, 0.2, 0.3.... 1 。因此,我将具有此值和受过训练的技能的玩家分组,并使用运算符 $in 更新数据库,其中包含训练相同技能且训练值相同的玩家 ID
最佳答案
可以通过查询文档来限制:
db.players.update({skills: {$lt: 100}}, {$inc: {skills: 1}})
关于MongoDB 将限制设置为 $inc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587866/