Node.js 如何防止Mongodb/NodeJS中的竞争条件

Node.js 如何防止Mongodb/NodeJS中的竞争条件,node.js,mongodb,Node.js,Mongodb,我甚至不确定这是否有一个特定的名称,但下面是一个场景: 用户1和用户2都访问数据库中的一条记录(因此它们实际上具有相同的记录) 用户1更新记录 用户2尝试更新记录,但由于数据已更改,因此应失败 当我使用C#和SQL server编程时,如果一个表中有时间戳,实体框架(database Framework for.Net)会自动处理这个问题,并使修改数据的更新失败 MongoDB/NodeJS中有类似的东西吗 谢谢 Martinmongodb中没有内置的时间戳功能,但mongoose在这种情况

我甚至不确定这是否有一个特定的名称,但下面是一个场景:

  • 用户1和用户2都访问数据库中的一条记录(因此它们实际上具有相同的记录)
  • 用户1更新记录
  • 用户2尝试更新记录,但由于数据已更改,因此应失败
当我使用C#和SQL server编程时,如果一个表中有时间戳,实体框架(database Framework for.Net)会自动处理这个问题,并使修改数据的更新失败

MongoDB/NodeJS中有类似的东西吗

谢谢
Martin

mongodb中没有内置的时间戳功能,但mongoose在这种情况下可能会有所帮助:


在MongoDB中,并发事务模型不明显,但可以访问-
我个人建议远离猫鼬

您可以创建一个
locked
属性:

  • 用户1尝试更新记录,它以
    findOneAndUpdate({locked:null,…restOfConditions})开始
    并将
    locked
    设置为true

  • 用户2尝试更新记录时,它无法
    findOne
    ,因为部分条件是始终查询
    {locked:null}

  • 用户1完成更新记录,作为上次更新的一部分,它取消设置
    锁定

  • 这显然需要由您来实现,但我希望它能让您了解我将选择的方法