MongoDB 将限制设置为 $inc

标签 mongodb

我有体育运动员的数据库,其中包含他们的“技能”。例如数据库中的足球运动员有 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/

相关文章:

node.js - Mongoose : sort by math and search by multiple values in string array

java - 查询失败,错误代码 13

javascript - 以 javascript 形式记录 Bson 查询

MongoDB GridFS 对于相对较小的文件来说文件大小很大

javascript - 如何从 Mongoose 的集合中排除一个特定字段?

node.js - Dockerized MongoDB 无法从 NodeJs 容器连接到 Heroku

node.js - 如何在node.js中验证 Mongoose 连接mongodb

node.js - Mongoose :更新特定文档数组的元素

mongodb - 在mongodb中查询字符串类型Date

node.js - 为什么我总是收到 OverwriteModelError?