如何解决mongodb中的原子事务

时间:2017-05-15 23:31:09

标签: mongodb mongoose transactions database

我有一个商店,其中商品价格是根据可用的数量确定的,所以每当用户请求商品时,我都必须计算价格基于请求数量

我必须以原子方式实施价格计算,以便在计算正在进行的交易和价格 availableQuantity 更改,它不应该影响两个事务。

初始数据库

{
   "_id": "1",
   "availableQuantity": 10,
   "pricePerItem": 15
},
{
   "_id": "2",
   "availableQuantity": 5,
   "pricePerItem": 10
},
{
   "_id": "3",
   "availableQuantity": 6,
   "pricePerItem": 20
}

这意味着
我可以卖出价格 10 / item 5 商品 下一个 10 商品,价格 15 /商品
下一个 6 商品,价格 20 /商品

塞纳里奥:

用户“A”想购买8件商品,价格将按此计算 首先,在我们的案例中将选择最低价格对象 _Id:“2”
5 项目将从此对象中获取,然后 price = 10 * 5 = 50

更新了数据库

{
   "_id": "1",
   "availableQuantity": 10,
   "pricePerItem": 15
},
{
   "_id": "3",
   "availableQuantity": 6,
   "pricePerItem": 20
}

剩余 3 项目将从 _id:“1”的最低价格对象中扣除 3 项目的价格价格= 3 * 15 = 45

用户“A” 8 项目的总价将总价= 50 + 45 = 95

最终数据库

{
   "_id": "1",
   "availableQuantity": 7,
   "pricePerItem": 15
},
{
   "_id": "3",
   "availableQuantity": 6,
   "pricePerItem": 20
}

问题

在用户“A”交易期间,如果用户“B”正在请求 4 项目,那么我们应该如何确定正确的价格。

注意:预计许多交易会同时发生

1 个答案:

答案 0 :(得分:0)

Mongodb不支持交易。有一些不太受欢迎的npm软件包模仿应用程序级别的事务行为,但就是这样:(