0

通过终端在 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
}]

不需要的更改包括历史中的原因变量已从“已接收”更改为“已发送”,以供各种用户使用。

由于我的查询没有解决“历史”问题,是否有关于造成这种情况的想法?

4

1 回答 1

2

来自 $inc 操作员文档:

$inc 运算符将字段增加一个指定的值,并具有以下形式:{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

行为

如果该字段不存在,则 $inc 创建该字段并将该字段设置为指定值。在具有空值的字段上使用 $inc 运算符将产生错误。$inc 是单个文档中的原子操作。

如您所见,定义指出 $inc 运算符仅递增指定的字段。没有关于可能的副作用和更改未指定字段的任何评论。

这意味着有另一个查询(或多个查询)更新history字段。可能您的应用程序或某些服务正在这样做。

于 2017-03-28T23:35:53.167 回答