【问题标题】:Mongodb shopping cart, how to check and update inventoryMongodb购物车,如何查看和更新​​库存
【发布时间】:2017-07-30 17:17:45
【问题描述】:

我阅读了documentation关于使用mongodb实现购物车的方法,但我对流程有疑问。

通过此实施,每次用户将产品放入购物车时,在用户执行结帐或购物车到期之前,其他买家都无法使用预留给客户的金额。

这种方法是有问题的,因为根据经验,大多数用户最终不会购买,而在一段时间内,这些产品只保留给他,因此无法负担得起。 这会导致销售损失。

例如:

  • db 中有 5 个数量的产品
  • 客户“A”将产品放入购物篮,数量为 5
  • 那么数据库中有 0 个产品可用
  • 另一位客户“B”进入网站,无法购买该产品
  • 最终客户“A”离开网站,购物车已满。
  • 购物车会在一个小时后自动清空。

结果:任何人都无法购买该产品的一小时!

我认为更好的方法是在结帐时仅检查和更新实际金额。
这样您就不会失去销售太久。

这种方法的问题在于数量的原子更新的实现。

您如何看待这种方法?
您是否正在计划实施?

【问题讨论】:

    标签: node.js mongodb database


    【解决方案1】:

    如果我是你,我会为放入购物车的每个产品使用同一集合中的多条记录,但在“in-cart”类型的文档的索引上使用 10 分钟 TTL(请参阅 mongo TTL 文档) .然后,使用 db.col.aggregate(...) 您可以对这些记录求和并从可用总数中扣除计数。如果用户没有购买就离开了,TTL 会自动删除文档。如果他买了,你真的可以使用 doc.update 和 $inc 以负值从可用总数中扣除,并删除相关的购物车文档。

    产品文档:

    {
      type: 'product'
      product_id: 123,
      available: 4
    }
    

    购物车中的文档与“正在进行的购物”或废弃的购物车一样多:

    {
      type: 'in-cart'
      product_id: 123,
      customer_id: 1,
      taken: 2
    }
    
    {
      type: 'in-cart'
      product_id: 123,
      customer_id: 2,
      taken: 1,
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 2010-11-24
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2013-09-24
      相关资源
      最近更新 更多