node.js - Mongodb购物车,如何查看和更新​​库存

标签 node.js mongodb database

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

通过此实现,每次用户在购物车中输入产品时,在用户执行结帐或购物车到期之前,其他买家都无法使用为客户保留的支付金额。

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

例如:

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

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

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

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

您对这种方法有何看法?
您正在计划实现吗?

最佳答案

如果我是您,我会为放入购物车的每个产品使用同一集合中的多个记录,但在“购物车内”类型文档的索引上使用 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,
}

关于node.js - Mongodb购物车,如何查看和更新​​库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445669/

相关文章:

sql - 数据库效率 - 每个用户表与用户表

javascript - iron-ajax 绑定(bind)并将 JSON 写入文件

node.js - 无法调用 Passport 本地策略

javascript - 为什么这些日期从 MongoDb 获取后结果为 'Invalid Dates'?

java - Mongodb 读取查询使用 Spring Data 非常慢,而使用 Morphia 则速度很快

php - 如何使用javascript和数据库mysql创建数组?

javascript - 将对象传递给回调的正确方法?

javascript - 创建空字符串数组?

mongodb - 通过 Scala Play 连接时如何解决 MongoDB 超时错误!框架?

mysqldump 仅转储具有特定前缀的数据库