通过终端在aws ec2实例中托管的现有mongodb数据库中执行此操作:
db.users.update({},{ $inc: { point_total: 100 } }, {multi:true})
除了将所有用户的变量增加100之外,还有同一集合中另一个变量(历史记录)的条目更改。
history: [{
c_id: String,
created_at: {type: Date, default: Date.now },
reason: String, //Received, Sent
amount: String
}]
不需要的更改包括历史记录中的原因变量已从各种用户的“已接收”更改为“已发送”。
由于我的查询并未解决“历史”问题,是否有关于导致这种情况的想法?
答案 0 :(得分:2)
来自$ inc运营商文档:
$ inc运算符按指定值递增字段,其格式如下:
{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
行为
如果该字段不存在,$ inc将创建该字段并将该字段设置为指定值。在具有空值的字段上使用$ inc运算符将生成错误。 $ inc是单个文档中的原子操作。
如您所见,该定义指出$ inc运算符仅增加指定的字段。对可能的副作用和更改非指定字段没有任何评论。
这意味着还有另一个更新history
字段的查询(或查询)。可能你的应用程序或某些服务正在这样做。