【问题标题】:MongoDB - How to atomically increase a number and get the new valueMongoDB - 如何以原子方式增加数字并获得新值
【发布时间】:2020-08-11 12:19:39
【问题描述】:

基本上我需要在文档中增加一个计数器并获取新值,但这必须以原子方式工作。

当前我正在使用的命令:

.updateOne({_id: ObjectId('5ed7f23789bcd51e9c6a82e0')}, {$inc: {nextTicket: 1}})

但我找不到如何立即获得新的增量值。

【问题讨论】:

    标签: javascript mongodb mongoose concurrency atomic


    【解决方案1】:

    updateOne 不返回文档/文档字段。

    你想要做的是使用findOneAndUpdate。现在这仍然返回“旧”文档,因此您要指定 returnOriginal: false

    .findOneAndUpdate({_id: ObjectId('5ed7f23789bcd51e9c6a82e0')}, {$inc: {nextTicket: 1}}, {returnOriginal: false})
    

    【讨论】:

    • 我刚刚看到堆栈溢出自动“原子地”更正为“自动”,后期编辑。 findOneAndUpdate 是原子的吗?
    • 是的,Mongo 的所有单写操作符都是原子的。
    猜你喜欢
    • 2017-01-18
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2014-12-06
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多