MongoDB - 原子操作

MongoDB - 原子操作 首页 / MongoDB入门教程 / MongoDB - 原子操作

MongoDB不支持多文档原子事务,但是,它在单个文档上提供了原子操作,因此,如果文档具有一百个字段,那么update语句将不更新所有字段,或者不更新任何字段,从而在文档级别上保持原子性。

原子操作的模型数据

保持原子性的推荐方法是保留所有相关信息,这些信息经常使用嵌入式文档一起更新在单个文档中,这样可以确保单个文档的所有更新都是原子的。

考虑以下产品Product文档-

链接:https://www.learnfk.comhttps://www.learnfk.com/mongodb/mongodb-atomic-operations.html

来源:LearnFk无涯教程网

{
   "_id":1,
   "product_name": "Samsung S3",
   "category": "mobiles",
   "product_total": 5,
   "product_available": 3,
   "product_bought_by": [
      {
         "customer": "john",
         "date": "7-Jan-2014"
      },
      {
         "customer": "mark",
         "date": "8-Jan-2014"
      }
   ]
}

在本文档中,无涯教程将购买产品的客户的信息嵌入到 product_bought_by 字段中。现在,每当有新客户购买该产品时,无涯教程都会首先通过 product_available 字段检查该产品是否仍然可用。如果可用,将减少product_available字段的值,并将新客户的嵌入式文档插入product_bought_by字段。将为此功能使用 findAndModify 命令,因为它可以同时搜索和更新文档。

无涯教程网

>db.products.findAndModify({ 
   query:{_id:2,product_available:{$gt:0}}, 
   update:{ 
      $inc:{product_available:-1}, 
      $push:{product_bought_by:{customer:"rob",date:"9-Jan-2014"}} 
   }    
})

无涯教程的嵌入式文档和使用findAndModify查询的方法可确保仅在产品可用时才更新产品购买信息。整个事务都在同一查询中,是原子的。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Java核心技术面试精讲 -〔杨晓峰〕

如何设计一个秒杀系统 -〔许令波〕

10x程序员工作法 -〔郑晔〕

Kafka核心源码解读 -〔胡夕〕

如何看懂一幅画 -〔罗桂霞〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

说透数字化转型 -〔付晓岩〕

搞定音频技术 -〔冯建元 〕

Dubbo源码剖析与实战 -〔何辉〕

好记忆不如烂笔头。留下您的足迹吧 :)