这主要是为了解决竞争问题(例如,多个线程试图更改单个文档)。
通常,如果我想更新文档的属性,则需要使用fine
,首先读取文档的当前输出,进行一些数学运算,然后update
文档。
当我有多个线程试图更改单个文档时,这有点令人不安,我不得不放置一个服务来对本身可能效率不高的突变进行排队。
是否可以使用数学表达式更新文档,例如:
db.album.updateOne({albumid},{view: $view + 1},{upsert:true});
答案 0 :(得分:2)
据我了解,您正在尝试做的工作是$inc
field update operator:
$ inc运算符接受正值和负值。 如果该字段不存在,则$ inc创建该字段并设置该字段 到指定值。 在具有空值的字段上使用$ inc运算符将生成一个 错误。 $ inc是单个文档中的原子操作。
db.products.update(
{ sku: "abc123" },
{ $inc: { quantity: -2 } } // substract 2 from quantity
)