在诸如冲刺购买和有限的人数之类的情况下,这是很常见的。
1。利用原子操作员
在原子运营商的帮助下,这可以实现。原子操作员包括:
例子:
const _ = db.command; let res = await db.collection('my_collection').where({ _id: id, limit: _.lt(10) }).update({ data: { limit: _.inc(1) } })
通过使用原子运营商Inc,避免并发写入的影响。
Mini 云开发文档这样描述了:
使用Inc指令而不是取出值,然后添加10然后将其写入其中的优点是,此写入操作是一种原子操作,并且不会受到并发写入的影响。例如,两个用户A和B使用相同的字段值,然后在将其写入数据库之前分别添加10和20,然后该字段的最终结果将为20而不是30。如果使用INC指令,则将遇到此问题。
()2。利用交易
如果您需要一次操作多个记录,或者您想一次操作多个记录,则可以使用交易完成。
云开发提供了两个接口:
有关特定的用法方法和差异,请参阅Mini 开发文档。
应该注意的是:
1。通过回调返回对象,然后直接返回对象。所有交易操作必须在对象下执行。 2。对象提供了一种方法,该操作类似于DB。,但仅支持单个记录操作(.doc,.add),并且不支持批处理操作(,)。