我正在尝试根据数据库的当前“状态”更改数据。
DB:{ID:string,Balance:long}
我的逻辑如下:
案例1:余额> =上限---->余额(不执行任何操作)
案例2:余额<上限和&余额+附加<=上限---->余额+附加(更新为新值)
案例3:余额<上限和&余额+其他>上限---->上限(更新为上限值)
*变量“ cap”和“其他”来自其他来源。
为避免争用情况,并且由于查询是原子的。我想使用它本身的查询来操作数据库中的数据。
var filter = Builders<BalanceDbDocument>.Filter.Where(d => d.ID == $"{ID}" && d.Balance + additional <= cap);
var update = Builders<BalanceDbDocument>.Update.Inc("Balance", additional);
BalanceDbDocument docz = await _mongoCollection.FindOneAndUpdateAsync(filter,update, cancellationToken: cancellationToken);
因此,当前代码应仅支持情况1和2。